Как назвать каждый Out-File как каждую строку ввода из Get-Content? - PullRequest
1 голос
/ 31 марта 2019

Я хотел бы получить содержимое каждого пути в pathlist.txt, и каждое содержимое пути должно быть сохранено в его собственном файле pathname.txt, названном как путь ввода.

Так что-то вроде этого:


$pathlist = Get-Content C:\Test\pathlist.txt

$pathlist | % { 
  Get-ChildItem $_ -Recurse |
    Out-File C:\Test\Output\"computername_" + $($_.replace("\","_").replace(":","")) +".txt" 
}

Ввод:

  • C: \ Test \ Test \ Test
  • D: \ Downloads
  • C: \ Windows \ Temp

Вывод:

  • имя_компьютера_C_Test_Test_Test.txt
  • имя_компьютера_D_Download.txt
  • имя_компьютера_C_Windows_Temp.txt
1023 *1024* каждыйвыходной текстовый файл содержит результат из Get-ChildItem -Recurse для указанного пути.

Ответы [ 2 ]

2 голосов
/ 31 марта 2019
$pathlist = Get-Content ‪C:\Test\pathlist.txt

$pathlist | ForEach-Object { 
  $outFile = 'C:\Test\Output\computername_{0}.txt' -f $_ -replace ':?\\', '_'
  Get-ChildItem -LiteralPath $_ -Recurse -Name > $outFile
}
  • Я заменил несколько вызовов метода .Replace() одним вызовом на основе регулярных выражений на оператор -replace PowerShell .

  • Я заменил конкатенацию строк (+) одним вызовом Оператор формата PowerShell , -f.

  • I 'мы заменили Out-File на > для краткости.

  • Я добавил -Name к вызову Get-ChildItem, чтобы строки пути относительно пути ввода былибыть выходом;если вам нужны абсолютные пути, используйте
    (Get-ChildItem -LiteralPath $_ -Recurse).FullName > $outFile (или
    Get-ChildItem -LiteralPath $_ -Recurse | Select-Object -ExpandProperty FullName > $outFile).

Что касается то, что вы пытались :

Ваша проблема заключалась в том, что вы не обернули выражение , которое построило целевое имя файла с помощью конкатенации строк в (...), что необходимо, если вы хотите использовать выражениев качестве команды аргумент .

Обратите внимание:

  • внутри выражения строковые литералы должны быть (полностью) заключены в кавычки
  • $(...)нужен только если вам нужно обернуть несколько операторов;в противном случае, если необходимо переопределить стандартный приоритет оператора , используйте (...).

Таким образом, ваша исходная команда может быть исправлена ​​с помощью:

... | Out-File ('C:\Test\Output\computername_' + $_.replace("\","_").replace(":","") + '.txt')
0 голосов
/ 31 марта 2019

все вроде бы нормально, но есть орфографические проблемы. Попробуйте это:

$pathlist | ForEach { Get-ChildItem -path $_ -Recurse | Out-File "C:\Test\Output\computername_" + $($_.replace("\","_").replace(":","")) +".txt" }

И дай мне знать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...