You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 20:07:48