1. 问题描述
有这么一段代码,遍历当前目录下的所有图片文件并打印。
然后,测试将每个文件路径赋值给新变量输出。
代码如下:
for /r %%i in (*.jpg, *.png) do (
echo %%i
set str=%%i
echo %str%
)
但是,却未能正常输出,输出结果如下:
此时不应有 .jpg。
分析问题,是.jpg文件含有圆括号,那么需要双引号将变量括起来。
2. 解决问题
修改代码如下:
for /r %%i in (*.jpg, *.png) do (
echo %%i
set str=%%i
echo "%str%"
)
输出结果如下:
D:\CodeTest\BatTest\imagebed\blog\PicGo安装Gitee插件.png
"D:\CodeTest\BatTest\imagebed\wallpaper\wallpaper (5).jpg"
D:\CodeTest\BatTest\imagebed\blog\spring-overview.png
"D:\CodeTest\BatTest\imagebed\wallpaper\wallpaper (5).jpg"
D:\CodeTest\BatTest\imagebed\wallpaper\wallpaper (3).jpg
"D:\CodeTest\BatTest\imagebed\wallpaper\wallpaper (5).jpg"
D:\CodeTest\BatTest\imagebed\wallpaper\wallpaper (5).jpg
"D:\CodeTest\BatTest\imagebed\wallpaper\wallpaper (5).jpg"
结果是出来了,但是多了双引号,而且每次循环结果都一样。
再次修改代码如下:
setlocal enabledelayedexpansion
for /r %%i in (*.jpg, *.png) do (
echo %%i
set str=%%i
echo !str!
)
这样,输出结果就正常了。
D:\CodeTest\BatTest\imagebed\blog\PicGo安装Gitee插件.png
D:\CodeTest\BatTest\imagebed\blog\PicGo安装Gitee插件.png
D:\CodeTest\BatTest\imagebed\blog\spring-overview.png
D:\CodeTest\BatTest\imagebed\blog\spring-overview.png
D:\CodeTest\BatTest\imagebed\wallpaper\wallpaper (3).jpg
D:\CodeTest\BatTest\imagebed\wallpaper\wallpaper (3).jpg
D:\CodeTest\BatTest\imagebed\wallpaper\wallpaper (5).jpg
D:\CodeTest\BatTest\imagebed\wallpaper\wallpaper (5).jpg