首先,为了在背景条件未知的情况下使兼容性最大化,不建议用 if defined 的办法,因为等号是无法作为变量名的,所以容易误判。如改用 sort 的办法,虽然会慢一些,兼容性却好很多。
其次,适时关闭变量延迟有助于提高对特殊字符 ! 的兼容性,如:
- : test !tmp!
- @echo off
- for /f "delims=" %%a in (%~s0) do (
- set str=%%a
- set /a n+=1
- setlocal enabledelayedexpansion
- echo !n!:!str!
- rem 如果写成 echo !n!:%%a,则会对 %%a 中的 !tmp!、!n!、!str! 进行解释
- endlocal
- )
- pause
复制代码
最后,变量嵌套时,除非确定文本中不存在特殊字符,否则尽量不要用 call,容易丢失 &、|、<、>、% 等特殊字符,建议用 for 来中转:
- for /f "delims=" %%b in (""!%%a!"") do echo !%%~b!
- ::这里用 ""!%%a!"" 是避免当前行满足默认设置中的 eol=; 时被跳过
复制代码
|