递归文件夹/文件复制Powershell脚本- Robocopy在完成列表后不会停止复制

s6fujrry  于 2022-12-26  发布在  Shell
关注(0)|答案(1)|浏览(202)

我正在尝试创建一个PS脚本,它可以从txt文件中读取文件夹名称,并递归地在源目录中查找文件夹/文件,然后使用robocopy复制到目标目录,同时保留文件夹名称、结构和时间戳。(在日志输出中)脚本沿着列表向下,将文件夹和文件复制到刚刚好的位置,但是当它到达列表的末尾时,它开始复制源目录中的所有其他内容。
txt文件数据如下所示:

400033
400042
400045
400047
400058
 etc..

“脚本”如下所示:

foreach ($line in 
[System.IO.File]::ReadLines("C:\temp\filecopy\TEST_400210_400033.txt")) { 

robocopy "J:\testSRC\$line" "S:\testDEST\$line" /DCOPY:DAT /E /R:3 /W:15 /log+:C:\temp\logs\TEST_ROBOCOPY_filecopy_Log1.txt /v /tee

}

谁能给我指一下正确的方向吗?
我试过在一个完全不同的脚本中使用Powershell的Copy-Item,并且能够让那个脚本工作,但是它太慢了。现在尝试robocopy。它按照它应该的顺序读取和复制文件,但是一旦它复制了列表,它就开始整个目录的整个副本,而不是在文本文件中的文件处停止。

jyztefdp

jyztefdp1#

文件的末尾是否有多余的一行?

400033
400042
400045
400047
400058
[Blank Line]

即,它遍历所有文件名,则最后一行将转换为:

$line = ""

因此:

robocopy "J:\testSRC\" "S:\testDEST\" /DCOPY:DAT /E /R:3 /W:15 /log+:C:\temp\logs\TEST_ROBOCOPY_filecopy_Log1.txt /v /tee

例如,robocopy根文件夹:第一个月
编辑:
尝试将文件输出到屏幕以验证输入文件是否正确并列出预期的目录。

foreach ($line in 
[System.IO.File]::ReadLines("C:\temp\filecopy\TEST_400210_400033.txt")) { 
    Write-Host "J:\testSRC\$line"
}

相关问题