PowerShell ForEach循环复制文件至多位置失败问题排查与解决
解决PowerShell批量复制文件仅第一个目标生效的问题
问题现象
尝试用PowerShell的ForEach循环将单个文件复制到多个目标位置时,文件仅成功复制到第一个路径,第二个路径未完成复制,反而被直接输出到控制台。
问题原因
原脚本中$TESTFilepaths = $Testpath1;$Testpath2的写法存在核心错误:在PowerShell中,分号是语句分隔符,这行代码实际是先给$TESTFilepaths赋值为$Testpath1,然后单独执行$Testpath2(这就是第二个路径被输出到控制台的原因),并没有将两个路径拼接成带分号的字符串。后续用split(';')拆分时,得到的列表只有第一个路径,导致循环仅执行一次。
原脚本
$filename = "test.txt" $Fullpath = "C:\Path\To\Folder\"+$filename $Testpath1 = "C:\Path\To\Folder\TestCopyTo\" $Testpath2 = "C:\Path\To\Folder\TestCopyTo_SecondPath\" $TESTFilepaths = $Testpath1;$Testpath2 $FilePathList = $TESTFilepaths.split(';') foreach($Path in $FilePathList){ Write-Host "Copying $Filename to $Path" Copy-Item $Fullpath -destination $Path }
修正方案
将路径拼接方式改为字符串连接操作$Testpath1+';'+$Testpath2,这样才能生成包含两个路径的分号分隔字符串,拆分后得到正确的路径列表,循环就能正常遍历所有目标路径。
修正后脚本
$filename = "test.txt" $Fullpath = "C:\FIS\Site\Quantum Reporting\Output\"+$filename $Testpath1 = "C:\FIS\Site\Quantum Reporting\Output\TestCopyTo" $Testpath2 = "C:\FIS\Site\Quantum Reporting\Output\TestCopyTo_SecondPath" $TESTFilepaths = $Testpath1+';'+$Testpath2 $FilePathList = $TESTFilepaths.split(';') foreach($Path in $FilePathList){ Write-Host "Copying $Filename to $Path" Copy-Item $Fullpath -destination $Path }
补充说明
生产环境中的路径字符串本身自带分号分隔,因此不会出现这个问题;而测试环境需要手动拼接分号,错误使用语句分隔符才导致了异常。
内容的提问来源于stack exchange,提问作者Chris
相关产品推荐
相关产品推荐

