2012-05-25 4 views
4

Я вывода содержимого каталога в текстовый файл с помощью следующей команды:Как удалить каретки из текстового файла с помощью Powershell?

$SearchPath="c:\searchpath" 
$Outpath="c:\outpath" 

Get-ChildItem "$SearchPath" -Recurse | where {!$_.psiscontainer} | Format-Wide -Column 1' 
| Out-File "$OutPath\Contents.txt" -Encoding ASCII -Width 200 

То, что я в конечном итоге, когда я делаю это TXT файл с информацией, мне нужно, но это добавляет многочисленные возврат каретки мне не нужен, делая вывод труднее читать.

Это то, что он выглядит следующим образом:

c:\searchpath\directory 

name of file.txt 

name of another file.txt 


    c:\searchpath\another directory 

name of some file.txt 

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

Я хотел бы, чтобы это выглядело как:

c:\searchpath\directory 
nameoffile.txt 
    c:\searchpath\another directory 
another file.txt 

Это то, что я пытался до сих пор не работает

$configFiles=get-childitem "c:\outpath\*.txt" -rec 
foreach ($file in $configFiles) 
{ 
(Get-Content $file.PSPath) | 
Foreach-Object {$_ -replace "'n", ""} | 
Set-Content $file.PSPath 
} 

Я также пытался «г, но оба варианта оставить файл не изменился.

Еще одна попытка:

Select-String -Pattern "\w" -Path 'c:\outpath\contents.txt' | foreach {$_.line}' 
| Set-Content -Path c:\outpath\contents2.txt 

Когда я запускаю эту строку без Set-контента в конце концов, оказывается, именно так, как мне это нужно в ISE, но как только я добавить Set-Content в в конце, он снова возвращает карету, где я им не нужен.

Что-то интересное, если я создаю текстовый файл с несколькими сообщениями каретки и несколькими вкладками, то если я использую тот же скрипт -replace, который я использовал, но используйте t to replace the tabs, it works perfect. But r и n do not work. It's almost as though it doesn't recognize them as escape characters. But if I add r и `n in тогда файл txt запускает скрипт, он все равно ничего не заменяет. Кажется, он не знает, что с ним делать.

ответ

4

Set-Content добавляет новые строки по умолчанию. Замена Set-Content на Out-File в последней попытке в вашем вопросе даст вам файл, который вы хотите:

Select-String -Pattern "\w" -Path 'c:\outpath\contents.txt' | foreach {$_.line} | 
Out-File -FilePath c:\outpath\contents2.txt 
+0

Это сработало, спасибо вам всем за помощь. – user1417978

1

Это не «r (апостроф), это обратный тик:` r. Это ключ над клавишей табуляции на раскладке клавиатуры США. :)

+0

OopsI typoed его там, но в моем фактическом сценарии это 'п – user1417978

1

Вы можете просто избежать всех этих пустых строк с помощью Select-Object -ExpandProperty Name:

Get-ChildItem "$SearchPath" -Recurse | 
    Where { !$_.PSIsContainer } | 
    Select-Object -ExpandProperty Name | 
    Out-File "$OutPath\Contents.txt" -Encoding ASCII -Width 200 

... если вам не нужны имена папок.

+0

К сожалению, мне нужно имена – user1417978

+0

папки я был с другой стороны, с аналогичной проблемой. Разве нет собственности FullPath? Всем удачи. – shellter

+0

@shellter Похоже, что OP нуждается в файлах, сгруппированных по папке. Я попытался выполнить это с помощью «Select-Object DirectoryName, Name» и «-GroupBy DirectoryName», но это дает тот же результат, что и исходная команда. – Filburt

Смежные вопросы