Записать переменные в файл как% VAR%, а не как значение переменной в BAT - PullRequest
1 голос
/ 25 апреля 2011

Записать переменные в файл как% VAR%, а не как значение переменной, а также задать правильную функцию списка задач при перенаправлении вывода.

Код im, используемый для записи в файл:

echo tasklist /FI "IMAGENAME eq %ZOEXT%" 2>NUL | find /I /N "%ZOEXT%">NUL >> boot.bat
echo if "%ERRORLEVEL%"=="1" start /d "%ZODIR%" %ZOEXT% >> boot.bat

Результат:

tasklist /FI "IMAGENAME eq Zoiper.exe"  
if "0"=="1" start /d "C:\Documents and Settings\mgladman\Desktop\Zoip\Zoiper Communicator\" Zoiper.exe 

То, что я хочу добавить в boot.bat:

tasklist /FI "IMAGENAME eq %ZOEXT%" 2>NUL | find /I /N "%ZOEXT%">NUL
if "%ERRORLEVEL%"=="1" start /d "%ZODIR%" %ZOEXT%

Если вы хотите, я могу опубликовать весь код, а не только сегмент, это крутой скрипт:P Просто есть эта небольшая проблема.

Единственный «обходной путь», который я могу себе представить, - это сделать первый скрипт, отразить эхо в первом файле и записать правильные системные данные (это должен быть переносимый скрипт, поэтомуэто будет работать, но будет грязно, как)

Ответы [ 3 ]

2 голосов
/ 26 апреля 2011

% может быть экранирован внутри партии с процентом.

echo %%var%%

Это не работает в командной строке, так как синтаксический анализатор работает там немного по-другому.
Не существует escape-символа для процента, но проценты предварительно сохраняются, если переменнаяне существует

set "var="
set "var2=content"
echo %var%  %%var2%%

приводит к
% var%% content%

2 голосов
/ 25 апреля 2011

Вы можете выйти из %, используя ^, если находитесь в командной строке.

Например:

set var=test
echo %var%

эхо test

set var=test
echo ^%var^%

эхо %var%

В пакетном файле вы должны использовать двойные% -

set var=1
echo %%var%%

эхо %var%

0 голосов
/ 02 мая 2011

Просто удвойте процентные знаки, чтобы избежать их, и используйте каретки, чтобы избежать большинства других специальных символов. Вот как бы я это сделал:

(echo tasklist /FI "IMAGENAME eq %%ZOEXT%%" 2^>NUL ^| find /I /N "%%ZOEXT%%"^>NUL)>>boot.bat
(echo if "%%ERRORLEVEL%%"=="1" start /d "%%ZODIR%%" %%ZOEXT%%)>>boot.bat
...