批处理变量中的波形符 ~ 的含义是什么?

Her*_*man 10 batch environment-variables batch-file windows-10

我从 知道call /?~in 变量(例如%~d1)用于解析文件路径的一部分(此处为驱动程序),但波浪号在此处的另一个上下文中使用:https ://www.tutorialspoint.com/batch_script/batch_script_string_length.htm :

@echo off
set str = Hello World
call :strLen str strlen
echo String is %strlen% characters long
exit /b

:strLen
setlocal enabledelayedexpansion

:strLen_Loop
   if not "!%1:~%len%!"=="" set /A len+=1 & goto :strLen_Loop
(endlocal & set %2=%len%)
goto :eof
Run Code Online (Sandbox Code Playgroud)

这里,这个变量扩展的意义是什么:"!%1:~%len%!"?它如何通过与空字符串比较来计算字符串的长度?这里波浪号的目的是什么?此外,这个例子将使我进入无限循环,其中输出是if not "!str:~136!" == "" set /A len+=1 & goto :strLen_Loop(数字!str:~n增长的地方)。

Was*_*sif 11

波形符 (~) 符号在批处理文件中以不同的方式使用:

  • 参数引用删除。命令行参数前的波形符(例如“%~1”)表示从参数中删除周围的引号。例如,如果 %1 的值为“Hi”,则 %~1 将扩展为仅 Hi。

  • 子串处理。有一种方法可以从批处理文件中的字符串变量中提取子字符串。语法是:%variable:~num_chars_skip,num_chars_keep%. 跳过字符数意味着字符串中的起始点,或者排除字符串变量之前的字符数。num chars to keep 表示起始点之后的字符数。要保留的字符数是可选的,但首先是强制性的。如果未指定 num chars to keep ,则仅解析 num chars to keep 的字符。

您应该在命令提示符下阅读这些内容以获得更多帮助:

  • call /?
  • for /?
  • set /?

希望有帮助