我的批处理中有以下代码,我想要读取 test.txt 中的行,创建一个包含前两个字符的文件夹,并为其目标文件夹中的相应项目创建配置 ini 文件。
这是我的代码结构:
@echo off
for /f "tokens=*" %%i in (test.txt) do (
set first2=%i:~0,2%
md "C:\Documents and Settings\someuser\Desktop\template\config\%first2%" 2>nul
type part1.txt>"C:\Documents and Settings\someuser\Desktop\template\config\%first2%\%%i"
echo.>>"C:\Documents and Settings\someuser\Desktop\template\config\%first2%\%%i"
echo Hostname=%%i.somedns.net>>"C:\Documents and Settings\someuser\Desktop\template\config\%first2%\%%i"
type part2.txt>>"C:\Documents and Settings\someuser\Desktop\template\config\%first2%\%%i"
)
Pause
test.txt 输入的示例:
OR0001R1
OR0001R2
OR0008R1
OR0009R1
OR0009R2
OR0009R3
OG0001R1
OG0001R2
OG0002R1
OG0003R1
我的问题如下,它没有创建文件夹 OR,而是在其中创建 OR0001R1.ini 等,然后为 OG inis 创建文件夹 OG,而是只创建文件夹 OR 以及其中的所有配置 inis。有人能帮我吗?
答案1
它仅创建文件夹OR
您需要使用enabledelayedexpansion
。
您的代码存在一个问题,即在代码块(带括号的一系列语句)中,任何内容%var%
都将被替换为变量的实际值解析时间不在执行时间处理时间。
如果您想使用在循环内改变的环境变量的值,那么您需要使用setlocal enabledelayedexpansion
and!var!
而不是%var%
。
这是批处理文件的更正版本:
@echo off
setlocal enabledelayedexpansion
for /f "tokens=*" %%i in (test.txt) do (
set first2=%%i
set first2=!first2:~0,2!
echo md "C:\Documents and Settings\someuser\Desktop\template\config\!first2!" 2>nul
type part1.txt>"C:\Documents and Settings\someuser\Desktop\template\config\!first2!\%%i"
echo.>>"C:\Documents and Settings\someuser\Desktop\template\config\!first2!\%%i"
echo Hostname=%%i.somedns.net>>"C:\Documents and Settings\someuser\Desktop\template\config\!first2!\%%i"
type part2.txt>>"C:\Documents and Settings\someuser\Desktop\template\config\!first2!\%%i"
)
Pause
endlocal
进一步阅读
- Windows CMD 命令行的 AZ 索引- 与 Windows cmd 行相关的所有事物的绝佳参考。
- 启用延迟扩展- 延迟扩展将导致变量在执行时而不是在解析时扩展。
- 对于/f- 循环命令以执行另一个命令的结果。