1

У меня есть следующий код в моем пакете, который я хочу прочитать строки в test.txt, создать папку с первыми 2 символами и сделать конфигурационные 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

Моя проблема заключается в следующем, вместо создания папки ИЛИ, в которой затем создается OR0001R1.ini и т.д., А затем создается папка OG для OG INIS, она создает только папку ИЛИ и все конфигурации INIS в нем. Может кто-то помочь мне с этим ?

1 ответ1

0

Это только создает папку OR

Вам нужно использовать enabledelayedexpansion .

Проблема с вашим кодом заключается в том, что в блоке кода (в серии операторов в скобках) любой %var% будет заменен фактическим значением переменной во время анализа, а не во время выполнения.

Если вы хотите использовать значение переменной окружения, которая изменяется внутри цикла, тогда вам нужно использовать setlocal enabledelayedexpansion и !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

Дальнейшее чтение

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .