2016-11-07 1 views
2

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

В двух словах у меня есть каталог со многими 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} 



} 
+0

Привет, 'Set-Content' пишет содержимое *** в *** файле. 'Rename-Item' будет переименовывать его. – sodawillow

ответ

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} 
    } 
+0

Привет, Мартин благодарит за ваш ответ намного чище, чем то, что я написал, я потратил некоторое время, чтобы понять -Raw, которого я раньше не видел, и включение двух терминов в фильтр, которые снова я не знал о столь массивной благодарности Вот! Ваше решение привело меня к более изящному решению того, что я пытаюсь сделать исключительно случайно. Не могу вас поблагодарить! В конце концов я использовал. –

+0

$ Directory = "L: \ Controls \ BCR \" $ variable = "-" $ suffix = ".tmp" Get-ChildItem $ Directory -Filter '* cash * csv' | ForEach-Object { (Get-Content $ _ -Raw) -заменить $ variable | Set-Content $ _ -Force } –

+0

Thats fine. Добро пожаловать! –