gpt4 book ai didi

batch-file - 如何接收最奇怪的命令行参数?

转载 作者:行者123 更新时间:2023-12-03 20:51:02 25 4
gpt4 key购买 nike

如另一个线程How to avoid cmd.exe interpreting shell special characters like < > ^中所述
从命令行获取所有参数并不容易。

一个简单的

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

在这种情况下,简单的回声%1将起作用。
显然这是for循环,但我不知道如何更改。
也许存在另一个简单的解决方案。

我不需要这个来解决实际的问题,但是我喜欢在每种情况下(不仅在大多数情况下)都是防弹解决方案的解决方案。

最佳答案

除了无法读取参数中的换行符,我认为没有人发现此漏洞:

@echo off
setlocal enableDelayedExpansion
set argCnt=1
:getArgs
>"%temp%\getArg.txt" <"%temp%\getArg.txt" (
setlocal disableExtensions
set prompt=#
echo on
for %%a in (%%a) do rem . %1.
echo off
endlocal
set /p "arg%argCnt%="
set /p "arg%argCnt%="
set "arg%argCnt%=!arg%argCnt%:~7,-2!"
if defined arg%argCnt% (
set /a argCnt+=1
shift /1
goto :getArgs
) else set /a argCnt-=1
)
del "%temp%\getArg.txt"
set arg


以上内容来自热烈的DosTips讨论- http://www.dostips.com/forum/viewtopic.php?p=13002#p13002。 DosTips用户Liviu提出了关键的 SETLOCAL DisableExtensions部分。

关于batch-file - 如何接收最奇怪的命令行参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4200316/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com