как обсуждалось в другом потоке Как избежать cmd.exe, интерпретирующего специальные символы оболочки, такие как <> ^ , нелегко получить все параметры из командной строки.
Простой
set var=%1
set "var=%~1"
недостаточно, если у вас есть запрос типа
myBatch.bat abc"&"^&def
У меня есть одно решение, но ему нужен временный файл, и он также не является пуленепробиваемым.
@echo off
setlocal DisableDelayedExpansion
set "prompt=X"
(
@echo on
for %%a in (4) do (
rem #%1#
)
) > XY.txt
@echo off
for /F "delims=" %%a in (xy.txt) DO (
set "param=%%a"
)
setlocal EnableDelayedExpansion
set param=!param:~7,-4!
echo param='!param!'
Сбой происходит с чем-то вроде myBatch.bat% a , отображается 4 , а не % a
вв этой ситуации простой echo% 1 будет работать.
Это, очевидно, цикл for, но я не знаю, как это изменить.
Возможно, существует другое простое решение.
Мне это не нужно для решения реальной проблемы, но мне нравятся решения, которые являются пуленепробиваемыми в каждой ситуации, а не только в большинстве случаев.