2012-08-27 43 views
1

所以我使用rsync备份一些常用目录excecuted的rsync的文件路径使用空格,使用批处理脚本和窗口调度为在这里看到:在一个批处理文件

rsync.bat

@echo off 

C: 
chdir C:\Cygwin\bin 

bash --login -i -c %1 

我正在使用Windows调度程序定期运行此批处理脚本,该工作完美 - 直到我将空间添加到文件路径中。下面是我在批处理文件的快捷方式使用目标路径的一个例子:

目标:C:\Cygwin\scripts\rsync.bat "rsync -vruh /cygdrive/t/uploads /cygdrive/d/Backups"

完美的作品。下面是一个用空格:

目标:C:\Cygwin\scripts\rsync.bat "rsync -vruh '/cygdrive/c/Users/username/My Documents' /cygdrive/d/Backups"

注意与空格的第一路单引号。我不能为了我的生活找出为什么这不起作用 - 我试过使用-s开关逃避空白的反斜杠,一些研究在过去解决了这个问题,但是可惜的是,没有工作。任何人都知道如何让这个工作?

回答

9

空格的问题是在处理完成解释命令行。和任何其他的Unix应用程序一样,你必须以某种方式在命令行中转义空格,否则它们将用于分隔参数。

例如: '?'

rsync -av host:'"a long filename"' /tmp/ 
rsync -av host:'a\ long\ filename' /tmp/ 
rsync -av host:a\\\ long\\\ filename /tmp/ 

或者使用

rsync -av host:a?long?filename /tmp/ 

只要你知道,在命令行远程文件名是:代替空间的,只要没有其他匹配的文件名不是一个用空格(“?”,因为任何字符相匹配)由远程shell解释,然后它一切正常。

http://rsync.samba.org/FAQ.html#9

+0

感谢您的回复。这是我过去最终做的解决之道。 +1 – taylorthurlow

+0

此答案实际上是从那里复制并粘贴的 - http://rsync.samba.org/FAQ。html#9 –

+0

答案是正确的,但它应该注意,空间必须跳过_twice_,一次用于本地shell解释命令,一次用于远程机器再次解释它。 –

0

我遇到了这个已经在批处理文件中使用rsync的在Windows 7也有类似问题的批处理文件代码是:

rsync -hrtv --modify-window=3602 /cygdrive/c/Users/gavin/My Documents/ArmA Other Profiles/TheProf/ /cygdrive/h/Hobies/ARMA_BU/ 

这可能只是Windows 7的问题但文件夹gavin /我的文档应该只是gavin/Documents。另外是需要单引号,克服了空间,如:

rsync -hrtv --modify-window=3602 '/cygdrive/c/Users/gavin/Documents/ArmA Other Profiles/TheProf/' /cygdrive/h/Hobies/ARMA_BU/ 
0

特殊情况: 如果有路径和通配符(*)的空间,上述解决方案似乎不工作(rsync: link_stat...failed

周围只有与引号的空间似乎工作。

/cygdrive/C/My" "Folder" "/My" "File*.txt 
相关问题