我们的目标是在一个svn属性中设置以下内容 .bat
文件。
Properties on 'logs':
svn:ignore
*
命令应该是 svn propset svn:ignore * logs
但星号需要以某种方式转义。我不想添加当前的文件列表,我真的想忽略日志目录下的所有文件,而不忽略日志目录本身。
然而我不知道如何正确地转义星号,以便在svn属性中得到一个字面的星号。
'*'
结果就变成了字符串 '*'
(带引号)设置为完全不忽略任何文件的值。"*"
或 ^*
仍然扩大星号,使svn在所有的目录上设置一个属性(用当前目录中的文件名)。\*
或者 "\*"
导致SVN在根目录下寻找一个(或所有?C:
驱使%*
导致值为 %*
我想不出有什么其他方法可以在bat文件中转义一个字符。
我可以想到另外两种方法来尝试,但很遗憾,我无法亲自验证,就不多说了......。
也许是双小节符^^*。
你可以尝试通过在批处理文件中传递星号作为变量来解决这个问题。例如:在你的批处理文件中,你可以尝试将星号作为变量传入。
@echo off
[...]
set asterisk=*
call svn propset svn:ignore %asterisk% logs
[...]
这应该会阻止星号的扩展,因为变量%asterisk%必须已经被扩展了,而且除非你激活了 ENABLEDELAYEDEXPANSION
在你的命令会话中的某个地方(用 cmd.exe /V:ON
或 SETLOCAL
).
在您的尝试中注明 \*
: 这种行为在我看来完全合法,因为 \
代表UNIXLINUX中当前驱动器的根目录。而svn对通配符的解释是在 fnmatch
在这样的系统中[参见红皮书中的svn:ignore]。这在Windows中基本上也是这样工作的。cd \
将会把你带到硬盘的第一层,并且有一个 dir \*.*
将列出第一层的文件,无论你在子目录的哪个位置。
希望这能帮到你。祝你的项目顺利:)