如何在Windows命令行和bat文件中向svn propset传递星号。

问题描述 投票:0回答:1

我们的目标是在一个svn属性中设置以下内容 .bat 文件。

Properties on 'logs':
  svn:ignore
    *

命令应该是 svn propset svn:ignore * logs 但星号需要以某种方式转义。我不想添加当前的文件列表,我真的想忽略日志目录下的所有文件,而不忽略日志目录本身。

然而我不知道如何正确地转义星号,以便在svn属性中得到一个字面的星号。

  • '*' 结果就变成了字符串 '*' (带引号)设置为完全不忽略任何文件的值。
  • "*"^* 仍然扩大星号,使svn在所有的目录上设置一个属性(用当前目录中的文件名)。
  • \* 或者 "\*" 导致SVN在根目录下寻找一个(或所有?C: 驱使
  • %* 导致值为 %*

我想不出有什么其他方法可以在bat文件中转义一个字符。

windows batch-file svn command-line
1个回答
0
投票

我可以想到另外两种方法来尝试,但很遗憾,我无法亲自验证,就不多说了......。

  1. 也许是双小节符^^*。

  2. 你可以尝试通过在批处理文件中传递星号作为变量来解决这个问题。例如:在你的批处理文件中,你可以尝试将星号作为变量传入。

@echo off
[...]
set asterisk=*
call svn propset svn:ignore %asterisk% logs
[...]

这应该会阻止星号的扩展,因为变量%asterisk%必须已经被扩展了,而且除非你激活了 ENABLEDELAYEDEXPANSION 在你的命令会话中的某个地方(用 cmd.exe /V:ONSETLOCAL).

在您的尝试中注明 \*: 这种行为在我看来完全合法,因为 \ 代表UNIXLINUX中当前驱动器的根目录。而svn对通配符的解释是在 fnmatch 在这样的系统中[参见红皮书中的svn:ignore]。这在Windows中基本上也是这样工作的。cd \ 将会把你带到硬盘的第一层,并且有一个 dir \*.* 将列出第一层的文件,无论你在子目录的哪个位置。

希望这能帮到你。祝你的项目顺利:)

© www.soinside.com 2019 - 2024. All rights reserved.