Robocopy在PowerShell直接运行与脚本中表现差异及单文件复制方案
如何让Robocopy在PowerShell脚本中仅复制单个文件?
我写了一个用Robocopy把文件从网络位置复制到本地的PowerShell 7脚本,但遇到了奇怪的问题:
- 直接在PowerShell中执行命令,或者在VS Code里调试运行时,只按预期复制1个文件
- 但把命令放进脚本里运行时,却复制了4个相关文件(包括
.db-shm、.db-wal和domoticz_.db)
我的脚本代码如下:
$dbname = "domoticz.db" $sourcedir="\\ix2\PiBackup\domoticz\" $targetdir="C:\tmp\DomoticzScripts\" $dbfile = $targetdir + $dbname robocopy $sourcedir $targetdir $db -njh
直接运行/VS Code调试时的输出:
New Dir 1 \\ix2\PiBackup\domoticz\ 100% New File 8.9 m domoticz.db ------------------------------------------------------------------------------ Total Copied Skipped Mismatch FAILED Extras Dirs : 1 1 0 0 0 0 Files : 1 1 0 0 0 0 Bytes : 8.96 m 8.96 m 0 0 0 0 Times : 0:00:00 0:00:00 0:00:00 0:00:00 Speed : 70709894 Bytes/sec. Speed : 4046.052 MegaBytes/min. Ended : zaterdag 30 mei 2020 11:45:40
脚本中运行时的输出:
New Dir 4 \\ix2\PiBackup\domoticz\ 100% New File 8.9 m domoticz.db 100% New File 32768 domoticz.db-shm 100% New File 0 domoticz.db-wal 100% New File 9.0 m domoticz_.db ------------------------------------------------------------------------------ Total Copied Skipped Mismatch FAILED Extras Dirs : 1 1 0 0 0 0 Files : 4 4 0 0 0 0 Bytes : 18.05 m 18.05 m 0 0 0 0 Times : 0:00:00 0:00:00 0:00:00 0:00:00 Speed : 75125841 Bytes/sec. Speed : 4298.735 MegaBytes/min. Ended : zaterdag 30 mei 2020 11:47:06
问题根源&修复方案
哥们,你这问题其实是个很典型的变量拼写错误!你仔细看脚本里的Robocopy命令:你写的是robocopy $sourcedir $targetdir $db -njh,但你定义的变量是$dbname和$dbfile,根本没有$db这个变量啊!
在PowerShell里,未定义的变量会被解析成空字符串,所以实际执行的命令相当于:
robocopy \\ix2\PiBackup\domoticz\ C:\tmp\DomoticzScripts\ -njh
Robocopy如果没收到要复制的文件名参数,就会默认复制源目录下的所有文件,这就是为什么脚本里运行时会把那几个关联的.db-shm、.db-wal和domoticz_.db都复制过来。而你手动运行或者调试时,应该是直接输入了正确的文件名,所以只复制了目标文件。
修复步骤
只需要把命令里的$db改成你定义好的$dbname就行:
robocopy $sourcedir $targetdir $dbname -njh
修改后的完整脚本:
$dbname = "domoticz.db" $sourcedir="\\ix2\PiBackup\domoticz\" $targetdir="C:\tmp\DomoticzScripts\" $dbfile = $targetdir + $dbname robocopy $sourcedir $targetdir $dbname -njh
这样不管是脚本执行还是手动运行,Robocopy都会精准复制你要的domoticz.db单个文件啦!
内容的提问来源于stack exchange,提问作者Benny
相关产品推荐
相关产品推荐

