Mar*_*son 32 powershell robocopy
我正在尝试在 powershell 中使用 robocopy 来镜像我家用机器上的一些目录。这是我的脚本:
param ($configFile)
$config = Import-Csv $configFile
$what = "/COPYALL /B /SEC/ /MIR"
$options = "/R:0 /W:0 /NFL /NDL"
$logDir = "C:\Backup\"
foreach ($line in $config)
{
$source = $($line.SourceFolder)
$dest = $($line.DestFolder)
$logfile = $logDIr
$logfile += Split-Path $dest -Leaf
$logfile += ".log"
robocopy "$source $dest $what $options /LOG:MyLogfile.txt"
}
Run Code Online (Sandbox Code Playgroud)
该脚本接收一个包含源目录和目标目录列表的 csv 文件。当我运行脚本时,我收到以下错误:
-------------------------------------------------------------------------------
ROBOCOPY :: Robust File Copy for Windows
-------------------------------------------------------------------------------
Started : Sat Apr 03 21:26:57 2010
Source : P:\ C:\Backup\Photos \COPYALL \B \SEC\ \MIR \R:0 \W:0 \NFL \NDL \LOG:MyLogfile.txt\
Dest -
Files : *.*
Options : *.* /COPY:DAT /R:1000000 /W:30
------------------------------------------------------------------------------
ERROR : No Destination Directory Specified.
Simple Usage :: ROBOCOPY source destination /MIR
source :: Source Directory (drive:\path or \\server\share\path).
destination :: Destination Dir (drive:\path or \\server\share\path).
/MIR :: Mirror a complete directory tree.
For more usage information run ROBOCOPY /?
**** /MIR can DELETE files as well as copy them !
Run Code Online (Sandbox Code Playgroud)
知道我需要做什么来修复吗?
谢谢,马克。
Hel*_*ick 26
如果您希望能够使用变量扩展并让生成的命令行正确理解您想要分隔哪些参数,哪些不应该分隔,那么从 Powershell 中将字符串填充到外部命令的参数中需要进行一些跳跃。在您的示例中,您将整个字符串作为第一个参数发送,而 Robocopy 告诉您它找不到作为源目录的长字符串。您确实希望将整个 Source 字符串视为一个参数(包括其中可能存在的空格),对于 Destination 也是如此,但您的 $what 和 $options 将失败,因为它们都将作为单个参数传递给 Robocopy,而不能是解析。
有几种方法可以正确执行此操作,但以下代码段基于您似乎想要分解参数的方式,并且适用于我使用的单目录示例。
$source="C:\temp\source"
$dest="C:\temp\dest"
$what = @("/COPYALL","/B","/SEC","/MIR")
$options = @("/R:0","/W:0","/NFL","/NDL")
$cmdArgs = @("$source","$dest",$what,$options)
robocopy @cmdArgs
Run Code Online (Sandbox Code Playgroud)
小智 14
如果变量$what和$options不改变,为什么它们是变量?
$what = "/COPYALL /B /SEC /MIR"
$options = "/R:0 /W:0 /NFL /NDL"
Run Code Online (Sandbox Code Playgroud)
这对我来说很好用:
robocopy $source $dest /COPYALL /B /SEC /MIR /R:0 /W:0 /NFL /NDL
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
190518 次 |
| 最近记录: |