批处理文件中更新命令行参数

7

是否可能在批处理文件中更新或替换命令行参数(例如%1)?

示例代码:

rem test.cmd
@echo off
echo Before %1
IF "%1" == "123" (
    set %%1 = "12345678"
)
echo After %1

期望的结果:


C:/>Test 123
Before 123
After 12345678

实际结果:

C:/>Test 123
Before 123
After 123

以编程方式?您总是可以在记事本中编辑批处理文件,尽管我怀疑这不是您要问的。请再具体一些 :) - apparatix
3
No. %1 指的是启动批处理文件时传递的第一个参数。除非退出批处理文件并使用不同的参数重新启动它,否则这是不可能的(也没有合理的理由想要这样做——如果你需要不同的值,在批处理文件内部给一个新变量赋值然后改变那个新变量即可)。 - Ken White
2个回答

5
不行。您尝试的不可能实现。
可以模拟将原始批处理参数传递给子程序,或者使用修改后的参数递归调用相同的 cmd,这些参数再次获取调用中提供的 %1、%2 等参数。但这并不是您所要求的。
rem test.cmd
@echo off
echo Before %1

if "%~1"=="123" (
    call :test %1234
) else (
    call :test %1
)

goto :EOF

:test

echo After %1

谢谢,我已经改成将参数加载到临时变量中,并可以修改临时变量。 - Veener

2

参数变量是保留的、受保护的变量,您不能自行修改这些变量的内容。

我建议您将参数存储在本地变量中,然后您可以进行所有想要的操作:

@echo off

Set "FirstArg=%~1"

Echo: Before %FirstArg%

IF "%FirstArg%" EQU "123" (
    Set "FirstArg=12345678"
)

Echo: After %FirstArg%

Pause&Exit

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接