Я пытаюсь создать крючок предварительной блокировки subversion для окон. Однако у меня серьезные проблемы с амперсандом в именах файлов:
Кажется, что 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