我编写了一个小脚本,通过根据输入文件生成完整的命令,帮助我更有效地将文件夹从一个地方移动到另一个地方。
代码:
Get-Content inputfile.txt |
ForEach-Object {
"robocopy D:\Home\" + $_ + " H:\Home-E\" + $_
} | Set-Content outputfile.txt
现在这个工作正常,除了最后一部分只被添加到最后一行。
输出文件如下所示:
robocopy D:\Home\ewja robocopy D:\Home\ewst robocopy D:\Home\ewwi robocopy D:\Home\ezga H:\Home-E\ezga
有人知道为什么第二部分会从第一行中被切断吗?
答案 0 :(得分:0)
在输入文件中的每一行之后输出空格搞砸了所有内容。删除了空格,一切按预期工作。
答案 1 :(得分:0)
您的问题纯属视觉问题:
输入文件的每一行之后的尾随空格非常长 - 每行但最后一行是右空格填充到119个字符 - 对$_
的第二个引用扩展为(以H:\Home-E\...
开头的部分)仅仅滚出视图。
只有 last 行不空格填充,因此对于最后一个命令,整个输出行在控制台中可见。
请注意,结果命令仍然会工作 ,因为传递给命令的参数之间的空白量并不重要。
要在源处解决问题:
Get-Content inputfile.txt |
ForEach-Object {
$_ = $_ -replace '\s+$' # trim trailing whitespace from input line
"robocopy D:\Home\" + $_ + " H:\Home-E\" + $_
} | Set-Content outputfile.txt
请注意,双引号字符串中的字符串插值可以使命令字符串的构造更简单"robocopy D:\Home\$_ H:\Home-E\$_"
但是,这两种方法通常都不是很强大,因为它可以打破带有嵌入空格的文件名的构造robocopy
命令,因此您必须执行引用/转义输入文件名。
具体方法取决于shell将最终执行包含构造命令的文件。