为什么子字符串不能与命令行参数一起使用?

问题描述 投票:0回答:1

在 Windows 批处理文件中,以下命令将提取除最后 4 个字符之外的所有

%1

set foo=%1
set x=%foo:~,-4%

但这行不通:

set x=%1:~,-4%

这是为什么?

string windows batch-file variables environment-variables
1个回答
3
投票

Windows 命令处理器

cmd.exe
仅支持使用 environment 变量(和 dynamic 变量)进行字符串替换,但不支持使用批处理文件 arguments(或使用 loop 变量)。

foo
是一个环境变量,其值通过使用
%foo%
的立即扩展和使用
!foo!
的延迟扩展来引用。环境变量支持字符串替换,如在
命令提示符
窗口中运行 set /? 时的帮助输出所述。 Windows 命令处理器
cmd.exe
支持命令行中各处 environment(和 dynamic)变量扩展的字符串替换。

有关更多详细信息,请参阅Windows 命令解释器 (CMD.EXE) 如何解析脚本?

有关环境变量和动态变量之间差异的解释,请阅读CMD 中动态环境变量和普通环境变量之间的差异的长答案。

%1
引用传递到批处理文件的 argument。在命令提示符窗口中运行
call /?
时的帮助输出解释了如何在批处理文件中引用参数以及 Windows 命令处理器支持哪些修饰符。
cmd.exe
argument 字符串上不支持字符串替换。

为了完整起见,运行

for /?
时的帮助输出解释了如何在循环体内引用 loop 变量以及可用的修饰符(与参数引用相同)。 loop变量不支持字符串替换。

© www.soinside.com 2019 - 2024. All rights reserved.