我正在尝试在 Windows 上创建一个颠覆预锁挂钩。但是,我对文件名中的 & 符号有严重的问题:
如果路径包含空格,svn 似乎会在我的批处理文件调用中将双引号(“)放在我要锁定的文件周围。但是,如果我的文件名包含&符号(&)并且没有空格,则没有双引号Windows 认为这是第二次调用,我的脚本没有得到正确的文件名。
正如您在日志文件中看到的那样,我无法正确处理 & 符号,因为 windows command.com 将转义引号与非转义引号解释相同:
>perl pre-lock.pl repo \""one & two"\" name
将始终失败,并显示“'two' 未被识别为内部或外部命令、可运行程序或批处理文件。”
这是 command.com 中的错误吗?
供参考和自我尝试,这是我的文件:
@echo off
echo %1 %2 %3 >> c:\hooktest.txt
set SCRIPTS=c:/scripts
SET PERL=C:/Perl/bin/perl.exe
%PERL% -w -I%SCRIPTS% "%SCRIPTS%/pre-lock.pl" \"%1\" \"%2\" \"%\3\"
set err=%errorlevel%
exit %err%
一个小的调试 perl 脚本:
use Data::Dumper;
print STDERR "This are the arguments:\n";
print STDERR Dumper(@ARGV);
exit 1;
在我的 Hook 日志中记录了以下内容:
c:\repo /test/file_nospace.txt pparker
c:\repo "/test/file with space" pparker
c:\repo "/test/file with & ampersand.txt" pparker
c:\repo /test/file_with_&_ampersand.txt pparker