windows - 将批处理变量正确传递到嵌套循环 - 变量的延迟扩展
问题描述
我正在尝试制作一个脚本,该脚本从 list.txt(由回车符分隔的文件目录名称列表)创建一组文件夹,每个文件夹都包含特定数量的由用户命名的子目录。
该脚本正是这样做的并且可以正常工作:
@echo off
setlocal enableextensions
set /P q="How many subdirectories would you like to add in each folder?[0/1/2/3]"
if /I "%q%" EQU "0" goto :somewhere0
if /I "%q%" EQU "1" goto :somewhere1
if /I "%q%" EQU "2" goto :somewhere2
if /I "%q%" EQU "3" goto :somewhere3
if errorlevel 1 goto :problem
:somewhere0
echo All done! Press any key to exit.
pause
exit
...(code cut for brevity)
:somewhere3
set /P c="What is the name of the first subdirectory?"
for /F "tokens=1 delims=," %%d IN (list.txt) DO md "%%c"\"%%d"
set /P c="What is the name of the second subdirectory?"
for /F "tokens=1 delims=," %%d IN (list.txt) DO md "%%c"\"%%d"
set /P c="What is the name of the third subdirectory?"
for /F "tokens=1 delims=," %%d IN (list.txt) DO if not exist %%d md "%%d" cd "%%d" md "%%c" cd ..
if errorlevel 1 goto :problem
goto :somewhere0
...
你得到图片。但是,我试图在循环中执行此操作,而不是对每个实例进行硬编码。我开发的代码如下所示:
@echo off
setlocal enableextensions
set "var=string"
set /P q="How many subdirectories would you like to add in each folder?"
for /l %%x in (1, 1, %q%) do (
set /P c="What is the name of subdirectory %%x?"
for /F "tokens=1 delims=," %%d IN (list.txt) DO md "%%d\%c%"
)
尝试在循环中间回显变量 %%d 或 %c% 不会产生任何结果。奇怪的是,该脚本实际上创建了顶级目录 - 即,此代码运行
for /F "tokens=1 delims=," %%d IN (list.txt) DO md "%%d
但子目录不显示。建议?
请注意,我真的不知道为什么第一个工作代码需要这种特殊的 % 符号顺序,但这是我让它工作的唯一方法。
解决方案
enabledelayedexpansion
是你想要的。
@echo off
setlocal enableextensions enabledelayedexpansion
set "var=string"
set /P q="How many subdirectories would you like to add in each folder? "
for /l %%x in (1, 1, %q%) do (
set /P c="What is the name of subdirectory %%x? "
for /F "tokens=1 delims=," %%d IN (list.txt) DO md "%%d\!c!"
)
cmd.exe
如果您运行,setlocal /?
您将获得更多帮助,但简而言之,enabledelayedexpansion
启用延迟的环境变量扩展。它将导致批处理文件中的变量在执行时而不是在解析时扩展。也可以CMD /V:ON
在命令行上启用,而不是在批处理中启用。
您基本上告诉命令处理器延迟变量的解析,直到它执行它们。%
被替换!
以显示要在扩展中使用哪些变量。
推荐阅读
- java - Spring Boot:无法配置数据源:未指定“url”属性,并且无法配置嵌入式数据源
- mysql - 厨师创建数据库数组
- python - 使用聚合函数过滤输出
- powershell - 在 foreach 循环中第一次调用后,Jenkins 上的 Mstest 输出不需要的 UTF-8 字符
- php - PHP 脚本不等待 curl 响应
- mysql - 如何从文件中加载数据而不重复记录
- python - 没有属性'get_default_graph'
- windows - 尝试在 Windows 7 机器上使用批处理文件自动化简单的任务和过程控制
- python - 在 Python 单元测试中分别模拟多个 API 请求
- android - 从 SMS REACT NATIVE 中读取消息