- Избегайте строк, содержащих ядовитые символы
cmd
в переменных, используя двойные кавычки при определении переменных:
set "_nl=& echo."
set "_file=path with spaces\name.ext"
- (есть несколько редких обстоятельств только там, где необходима еще одна экранирующая схема)
- и затем используйте переменные подходящим способом:
- unescaped:
echo WARNING !!!%_nl%Scheduler File is ^=%_size% bytes
- escape :
FOR /F "usebackq delims=" %%A IN ('"%_file%"') DO set "_size=%%~zA"
Обратите внимание, что имена переменных, определенные в следующем сценарии, с префиксом _
нижней строке (подчеркивание) для упрощения отладки, см. Вывод отладки SET _&PAUSE
(временный).
Комментируемый скрипт:
@ECHO OFF
SETLOCAL EnableExtensions DisableDelayedExpansion
REM The below command will look for the size of file on the server
REM and inform the user if scheduler is down.
set "_nl=& echo." escape ampersand by double quotes
set "_file=D:\bat\odds and ends\a b\testfile.txt" escape spaces using double quotes
rem set "_file=C:\SUPPORT\APAC SIT\NewtextDoc.txt"
set "_maxbytesize=0" keep using double quotes even if unnecessary
if not exist "%_file%" (
set /A "_size=_maxbytesize-1"
echo "%_file%" does not exist
) else (
FOR /F "usebackq delims=" %%A IN ('"%_file%"') DO set "_size=%%~zA"
)
echo debugging output should show variables _file, _maxbytesize, _nl, _size
SET _&PAUSE
if %_size% LEQ %_maxbytesize% (
echo WARNING !!!%_nl%Scheduler File is ^=%_size% bytes
echo Please do not process invoices, contact Webcenter Support
) else (
echo Scheduler File OK%_nl%"%_file%" filesize is %_size% bytes
)
PAUSE
Выход:
==> rename "D:\bat\odds and ends\a b\testfile.txt" testfilea.txt
==> set _
Environment variable _ not defined
==> D:\bat\SU\1130895.bat
"D:\bat\odds and ends\a b\testfile.txt" does not exist
debugging output should show variables _file, _maxbytesize, _nl, _size
_file=D:\bat\odds and ends\a b\testfile.txt
_maxbytesize=0
_nl=& echo.
_size=-1
Press any key to continue . . .
WARNING !!!
Scheduler File is =-1 bytes
Please do not process invoices, contact Webcenter Support
Press any key to continue . . .
==> rename "D:\bat\odds and ends\a b\testfilea.txt" testfile.txt
==> D:\bat\SU\1130895.bat
debugging output should show variables _file, _maxbytesize, _nl, _size
_file=D:\bat\odds and ends\a b\testfile.txt
_maxbytesize=0
_nl=& echo.
_size=13
Press any key to continue . . .
Scheduler File OK
"D:\bat\odds and ends\a b\testfile.txt" filesize is 13 bytes
Press any key to continue . . .
==>