chcp 65001
Echo !St!>>"%NewFileName%"
в любом случае вставляет перевод после выводимой строки. Чтобы этого не происходило, можно вместо echo
использовать set /p
с вводом из пустого устройства (forum.script-coding.com/viewtopic.php?id=2945):set /p =!St!<nul >>"%NewFileName%"
for /f "usebackq" %%a in (`echo %%h %%i
`
(но, например, ниже чем у неэкранированного знака "
).|
стал частью команды, а не её ограничителем, его необходимо экранировать знаком ^
. set "randomFile=!pyti_k_15_perebivkam[!randomIndex!]!"
call set "randomFile=!pyti_k_15_perebivkam[%%randomIndex%%]!"
call
для отложенного раскрытия переменных, при котором могут быть свои трудности. (
set /p "s1="
set /p "s2="
set /p "s3="
) <input.txt
more
:more +3 input.txt >>output.txt
more +3 <input.txt >>output.txt
(
set /p "s1="
set /p "s2="
set /p "s3="
echo !s3!
echo !s2!
echo !s1!
more
) <input.txt >output.txt
del input.txt
ren output.txt input.txt
more
find /v ""
Условный
for /f "Tokens=*" %f in ('dir /l/b/a-d') do (rename "%f" "%f")
поэтому не срабатывает.
Вручную приходится делать Abc.jpg -> 1Abc.jpg -> abc.jpg
(ren "%f" "to_lower_%f" && ren "to_lower_%f" "%f")
for %g in ("%~nxf") do if not "%f"==%g
:for /f "delims=" %f in ('dir /l/b/a-d') do for %g in ("%~nxf") do if not "%f"==%g (ren "%f" "to_lower_%f" && ren "to_lower_%f" "%f")
for /f "delims=" %%f in ('dir /l/b/a-d') do for %%g in ("%%f*") do (
if /i "%%f"=="%%g" if not "%%f"=="%%g" (
ren "%%f" "to_lower_%%f" && ren "to_lower_%%f" "%%f"
)
)
RD %cd% не удаляет? — Должно же быть какое-то сообщение об ошибке, которое нужно привести в вопросе.
for %%D in (.) do (cd ..& rd "%%~fD")
CD
не определена, используйте одноимённую псевдопеременную:cd ..& rd "%CD%"
RD
скорее всего потребует дополнительные ключи (/S
и /Q
).tasklist /fi "IMAGENAME eq vlc.exe" | find /c /i "vlc.exe">file.tmp
set /p "VAR="<file.tmp
del file.tmp
/f
вывод команды:for /f %%V in ('tasklist /fi "IMAGENAME eq vlc.exe" ^| find /c /i "vlc.exe"') do set "VAR=%%V"
cmd.exe
.) ping
перенаправляется на вход сложной команды.|
) в cmd
(сказанное не относится к перенаправлению в/из файл(а)), когда с какой-то из сторон стоит внутренняя или составная команда, для неё запускается отдельный процесс cmd.exe
, поэтому лучше задать это явно, чтобы иметь возможность точно указать параметры его запуска, как мудро и проделано в рассматриваемом примере (но, похоже, забыли про обычно используемый в таких случаях ключ /d
для отключения выполнения возможных команд из реестра при запуске нового процессаcmd
).1. Как работает эта часть кода (pause&pause)>nul
pause
ожидает ввод от пользователя и, когда на её вход поступает строка, прекращает ждать, >nul
подавляет (перенаправляет на пустое устройство) приглашение от pause
нажать любую клавишу (в данном случае подавляется весь вывод составной команды, состоящей из двух pause
).>nul
использовать, например, две команды set /p
, даже и не указывая перед знаком равенства имя переменной, в которую вводится строка.2. Как работает эта часть set /p "data=" && echo(!date! !time! !data!)
cmd
, то есть из выходного потока ping
, помещается (set /p
) в переменную окружения data
и в случае успеха (&&
), за который считается то, что была введена непустая строка (иначе переменная окружения не изменяется), выполняется следующая команда echo
, выводящая строку из разделённых пробелами псевдопеременных date
, time
и только что установленной переменной data
. date
иtime
содержат текущие дату и время, но только если не определены одноименные переменные окружения, поэтому для учёта всех возможных случаев их следовало бы в начале явным образом сбросить./v
команды cmd
. (Возможно также для отложенного раскрытия использовать команду call
…)echo
— это не открывающая скобка составной команды, а разделитель между командой echo
и её аргументом, а закрывающая скобка относится к составной команде в цикле for /l %a in () do
.ping -n 2 8.8.8.8>nul
после бесконечного цикла, я не знаю и буду рад увидеть разъяснения этому.7.10.2022 21:47:58,02 Ответ от 8.8.8.8: 7.10.2022 21:47:58,04 число байт=32 время=244мс TTL=104 7.10.2022 21:47:59,04 Ответ от 8.8.8.8: 7.10.2022 21:47:59,04 число байт=32 время=240мс TTL=104 7.10.2022 21:48:00,05 Ответ от 8.8.8.8: 7.10.2022 21:48:00,05 число байт=32 время=233мс TTL=104
set /a
не следует без необходимости и понимания заключать имена переменных в знаки процента, так как в этом случае их значения будут подставлены до выполнения составной команды, что приведёт к ошибкам, например, в цикле.set /a "sum = (x + x) * c * x"
set /a sum = "(x + x) * c * x"
@echo off
setlocal enableextensions enabledelayedexpansion
:0
if "%~1" == "" (
set /p in="Входной файл: "
call :0 !in!
exit /b
)
if not exist "%~1" (
echo "%~f1" не найден.
endlocal
exit /b 1
)
set /a i = 0
for /f "usebackq skip=1 delims=" %%L in ("%~1") do (
if "%%L" == "<post>" (
set /a i += 1
(echo ^<?xml version="1.0" encoding="UTF-8"?^>)>!i!.xml
)
(echo(%%L)>>!i!.xml
)
endlocal
<post>
, которые должны начинаться с начала строки и не иметь пробелов в конце строки. ren "-@xxx*" " *"
for %%i in (" *") do for /f "tokens=*" %%j in ("%%i") do ren "%%i" "%%j"
|
на ^^^|
:set LINE=block_image_update(map_partition("product_a"), package_extract_file("product.transfer.list"), "product.new.dat.br", "product.patch.dat") ^^^|^^^| abort("E2001: Failed to update product image.");
|
для set
и ещё раз экранируются |
и уже ^
для echo
.|
и )
:setlocal enabledelayedexpansion
set s=1
if %s% == 1 (
set LINE=block_image_update(map_partition("product_a"^), package_extract_file("product.transfer.list"^), "product.new.dat.br", "product.patch.dat"^) ^|^| abort("E2001: Failed to update product image."^);
echo !LINE! >> file
)
start
:LOW Запуск приложения с приоритетом IDLE.
BELOWNORMAL Запуск приложения с классом приоритета BELOWNORMAL
КОМАНДА1 && КОМАНДА2
КОМАНДА1 || КОМАНДА2
КОМАНДА && echo Ошибок нет! || echo Ошибка!
&
между командами в одной строке. Для размещения одной простой команды на нескольких строках можно использовать ^
в конце переносимой строки…)