针对此例,%1在注册表中来说,我测试了一次含有空格的文件名,%1结果无引号,此时,用两种方法都对。
扩展到写其它脚本时,如果不知道一个变量首尾是否含有引号,而希望获取到的结果是 首尾不包含引号。
测试
- @echo off
- set str="1 23.txt"
- echo [%str%]
- for %%a in ("%str%") do echo %%~a
- for /f "delims=" %%a in ("%str%") do echo %%~a
- pause
复制代码
结果
- 结果
- ["1 23.txt"]
- "1
- 23.txt""
- 1 23.txt
复制代码
从结果可以看出, for %%a 获取结果不符合预期,for /f 获取结果符合预期。
好奇再测试一下,如果 变量只含有单侧引号,结果是什么样子的呢?
测试
- @echo off
- setlocal enabledelayedexpansion
- set "str="1 23.txt"
- echo [!str!]
- for %%a in ("!str!") do echo %%~a
- for /f "delims=" %%a in ("!str!") do echo %%~a
- pause
复制代码
结果
- ["1 23.txt]
- "1
- 23.txt"
- 1 23.txt
复制代码
同样,for /f 也能正确获取符合预期的结果,仅字符串首部 含有引号也能成功去除。
至于仅字符串尾部含有引号,结果是什么样子的呢?可以自己动手测试一下。如果尾部引号比首部多,是不是可以给首部多添加引号,然后多次for /f 扩展%%a到%%~a,获取到期望的结果呢。 |