Я пытаюсь создать ловушку предварительной блокировки Subversion для Windows.Однако у меня серьезные проблемы с амперсандом в именах файлов:
Кажется, svn поместит двойные кавычки (") вокруг моего файла, который нужно заблокировать, при моем вызове моего пакетного файла, если путь содержит пробелы. ОднакоЕсли мое имя файла содержит амперсанд (&) и пробелы отсутствуют, двойные кавычки отсутствуют, и окна считают, что это второй вызов, а мой сценарий не получает правильное имя файла.
Как вы можете видеть в файле журнала, я не могу обработатьАмперсанд правильно, потому что windows command.com интерпретирует экранированные кавычки так же, как не экранированные:
>perl pre-lock.pl repo \""one & two"\" name
всегда будет с ошибкой, «два» не распознается как внутренняя или внешняя команда, работающая программа или пакетфайл. "
Это ошибка в 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