Важно помнить, что расширенный текст должен выглядеть точно так же, как если бы вы просто вводили команду из командной строки.(на самом деле есть несколько исключений, но это хорошая отправная точка).
Чтобы отладить ваш скрипт, просто поставьте echo перед вашим вызовом: @echo call %1
.Теперь попробуйте запустить, как вы делали ранее: blah.bat "echo 'hello'"
производит call "echo 'hello'"
.Попробуйте запустить это из командной строки - это не работает.Вы хотите, чтобы call echo 'hello'
.
Одним из исправлений было бы небольшое изменение вашего сценария: модификатор ~
удаляет заключающие в кавычки аргументы
@echo off
call %~1
Или вы можете отказаться отвызовите и просто используйте следующее (если вы не вызываете другой пакетный файл, из которого вы хотите вернуть)
@echo off
%~1
Если в командной строке нет других аргументов, вам лучше использовать%*
, который распространяется на все аргументы
@echo off
%*
REM or call %*
Теперь вы можете называть свой пакет следующим образом:
blah.bat echo "hello"
Имейте в виду, что пакет имеет все виды особых странностей, которые, вероятно, потребуютдополнительное или другое кодирование для обхода.Слишком много, чтобы перечислить - просто ожидайте неожиданного.