Вывод нулевых результатов Get-ChildItem

У меня есть проблема, которую я не могу решить, независимо от того, как я ее оборачиваю. Я включаю свой последний код, который не дает желаемого результата, и код для решения, которое работает, но только для одного файла за раз. Однако я не могу понять, как автоматически перебирать каждый из файлов.

Короче говоря, у меня есть каталог со многими файлами CSV, некоторые записи в файле CSV имеют отрицательное значение (-). Мне нужно удалить этот знак минус во всех случаях.

Теперь что работает, если я использую следующее (в одном файле)

$content = Get-Content "L:\Controls\BCR\0001cash.csv" | ForEach {$_ -replace $variable, ""} | Set-Content "L:\controls\bcr\0001temp.csv"

То, что я пытаюсь сделать, это автоматически перебирать многие тысячи этих объектов и не обращаться к ним по отдельности.

Я начал с:

$Directory = "L:\Controls\BCR\"
$variable = "-"
$suffix = ".tmp"

Чтобы определить каталог, символ минуса, который я хочу удалить, и суффикс файла, который я хочу изменить на...

$Files = Get-ChildItem $Directory | Where-Object {$_.Extension -like "*csv*"} | Where-Object {$_.Name -like "*cash*"}

Получает каждый из файлов, с которыми я хочу работать

И я тогда работаю с

ForEach ($File in $Files) { Get-Content $Files | ForEach {$_ -replace $variable, ""} | Set-Content {$_.Basename + $Variable}

Но результаты ни о чем...

В убыток? Кто угодно???

$Directory = "L:\Controls\BCR\"
$variable = "-"
$suffix = ".tmp"


$Files = Get-ChildItem $Directory | Where-Object {$_.Extension -like "*csv*"} | Where-Object {$_.Name -like "*cash*"}

$process = ForEach ($File in $Files) { Get-Content $Files | ForEach {$_ -replace $variable, ""} | Set-Content {$_.BaseName + $suffix}



}

person Mr Deans    schedule 07.11.2016    source источник
comment
Здравствуйте, Set-Content записывает содержимое в файл. Rename-Item переименовал бы его.   -  person sodawillow    schedule 07.11.2016


Ответы (1)


Вы используете неправильную переменную в командлете Get-Content ($Files вместо $File). Также Вы можете упростить свой скрипт:

$Directory = "L:\Controls\BCR\"
$variable = "-"
$suffix = ".tmp"
Get-ChildItem $Directory -Filter '*cash*csv' | 
    ForEach-Object {
        (Get-Content $_ -Raw) -replace $variable |
             Set-Content {$_.BaseName + $suffix}
    }
person Martin Brandl    schedule 07.11.2016
comment
Привет, Мартин, спасибо за твой ответ, намного чище, чем то, что я написал, мне потребовалось некоторое время, чтобы понять -Raw, которого я раньше не видел, и включение двух терминов в фильтр, о котором я снова не знал, о таком огромном спасибо здесь ! Ваше решение привело меня к более элегантному решению того, что я пытался сделать чисто случайно. Не могу отблагодарить вас достаточно! Я в конце концов использовал. - person Mr Deans; 07.11.2016
comment
$Directory = L:\Controls\BCR\ $variable = - $suffix = .tmp Get-ChildItem $Directory -Filter 'cashcsv' | ForEach-Object { (Get-Content $_ -Raw) -replace $variable | Set-Content $_ -Force } - person Mr Deans; 07.11.2016