【发布时间】:2017-03-19 22:51:41
【问题描述】:
我正在尝试以编程方式使用 Windows CMD SET 字符串操作版本。 SET的两个版本是……
SET New_String=%String:Old_Text=New_Text%
在变量String 中,将Old_Text 替换为New_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%%
要做到以上两个SETs 你必须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 窗口中不起作用?我研究了一下,没有找到任何解释原因的信息。
【问题讨论】: