我想从pathlist.txt中的每个路径获取内容,每个路径的内容都应保存到他自己的pathname.txt文件中,命名为输入路径。
是这样的:
$pathlist = Get-Content C:\Test\pathlist.txt
$pathlist | % {
Get-ChildItem $_ -Recurse |
Out-File C:\Test\Output\"computername_" + $($_.replace("\","_").replace(":","")) +".txt"
}
输入:
输出:
每个输出文本文件都包含Get-ChildItem -Recurse的命名路径结果。
答案 0 :(得分:2)
$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()
方法调用替换为对PowerShell's -replace
operator的基于正则表达式的单个调用。
我已经用一次调用PowerShell's format operator,+
替换了字符串连接(-f
)。
为简便起见,我已将Out-File
替换为>
。
-Name
调用中添加了Get-ChildItem
,以便输出相对于输入路径的路径字符串;如果需要绝对路径,请使用(Get-ChildItem -LiteralPath $_ -Recurse).FullName > $outFile
代替(或Get-ChildItem -LiteralPath $_ -Recurse | Select-Object -ExpandProperty FullName > $outFile
。关于您尝试过的事情:
您的问题是您没有包装通过字符串连接在(...)
中构建目标文件名的表达式,如果您想将表达式用作命令 argument 。
请注意:
$(...)
;否则,如果需要覆盖标准operator precedence,请使用(...)
。因此,您的原始命令可以通过以下方式修复:
... | Out-File ('C:\Test\Output\computername_' + $_.replace("\","_").replace(":","") + '.txt')
答案 1 :(得分:0)
一切似乎都还可以,但存在拼写问题。试试这个:
$pathlist | ForEach { Get-ChildItem -path $_ -Recurse | Out-File "C:\Test\Output\computername_" + $($_.replace("\","_").replace(":","")) +".txt" }
让我知道。