我正在尝试以编程方式使用Windows CMD中的SET
字符串操作版本。 SET
有两个版本...
SET New_String=%String:Old_Text=New_Text%
在变量
String
中用New_Text
替换Old_Text
,并将结果返回到变量New_String
中。SET New_String=%String:~Number_Of_Chars_To_Skip,Number_Of_Chars_To_Keep%
在变量String
中跳过Number_Of_Chars_To_Skip
个字符后提取Number_Of_Chars_To_Keep
个字符,并将结果存储在变量New_String
中。
Old_Text, New_Text, Number_Of_Chars_To_Skip, Number_Of_Chars_To_Keep
必须都是字面值,而不是变量。因此,典型的用法如下...
SET New_String=%String:abcd=fghi%
SET New_String=%String:~2,4%
这种使用方法是不起作用的...
SET New_String=%String:%Old_Text%=%New_Text%%
SET New_String=%String:~%Skip_Count%,%Keep_Count%%
要执行上述两个
SET
操作,您需要像这样CALL SET
。CALL SET New_String=%%String:%Old_Text%=%New_Text%%%
CALL SET New_String=%%String:~%Skip_Count%,%Keep_Count%%%
因此,我有以下测试代码片段...
所以, 我有下面这个测试代码片段...
SET "Chars=" & SET "String=0123456789" & SET "Skip=1" & SET "Keep=3"
CALL SET Chars=%%String:~%Skip%,%Keep%%%
ECHO Chars="%Chars%" (expected to be "123")
从CMD文件中,这个指令可以正常工作。
CALL
已经被扩展为SET Chars=%string:~1,3%
,并返回了预期的结果123。但是,从CMD窗口(具有相同变量)执行完全相同的CALL SET
会返回如下结果...%0123456789Skip%,3%%
为什么这在CMD窗口中不能工作?我查阅了相关资料,但没有找到任何解释。