我编写了一个小脚本,通过基于输入文件生成完整的命令来帮助我更有效地将文件夹从一个地方移动到另一个地方。
代码:Get-Content inputfile.txt |
ForEach-Object {
"robocopy D:Home" + $_ + " H:Home-E" + $_
} | Set-Content outputfile.txt
现在工作正常,除了最后一部分只被添加到最后一行。
输出文件如下:
<>以前robocopy D: ewja回家robocopy D: ewst回家robocopy D: ewwi回家robocopy D:Homeezga H:Home- eezga有人知道为什么第二部分从第一行被截断了吗?
你的问题是纯粹的视觉问题:
输入文件每行后的尾随空格太长了-每行都是右空格填充到119个字符- 第二次引用$_
扩展到(以H:Home-E...
开头的部分)只是滚动出视图。
只有最后一行没有填充空格,所以对于最后一个命令,整个输出行在控制台中是可见的。
注意,生成的命令仍然可以使用,但是,因为传递给命令的参数之间的空白数量无关紧要。
从源头解决问题:
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最终将执行包含构造命令的文件。
输入文件中每行后面的空格把一切都搞砸了。删除空格后一切正常