批处理脚本,使用前 2 个字符创建文件夹,在其中创建配置 ini 文件

批处理脚本,使用前 2 个字符创建文件夹,在其中创建配置 ini 文件

我的批处理中有以下代码,我想要读取 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 enabledelayedexpansionand!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

进一步阅读

相关内容