Script em lote para criar pasta com os primeiros 2 caracteres para criar arquivos ini de configuração

1

Eu tenho o seguinte código no meu lote, que eu quero ler as linhas no test.txt, criar uma pasta com os 2 primeiros caracteres e fazer arquivos de configuração ini para os respectivos itens em sua pasta desejada.

Aqui está a estrutura do meu código:

@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

Exemplo de entrada do test.txt:

OR0001R1
OR0001R2
OR0008R1
OR0009R1
OR0009R2
OR0009R3
OG0001R1
OG0001R2
OG0002R1
OG0003R1

Meu problema é o seguinte, em vez de criar a pasta OR na qual ele cria OR0001R1.ini e assim por diante e depois criar a pasta OG para o OG inis, ele cria apenas a pasta OR e todas as suas configurações. Alguém pode me ajudar com isso?

    
por GreyS 29.03.2016 / 11:07

1 resposta

0

Cria apenas a pasta OR

Você precisa usar enabledelayedexpansion .

O problema com o seu código é que dentro de um bloco de código (série de instruções com parênteses) qualquer %var% será substituído pelo valor real da variável no tempo de análise e não na execução tempo .

Se você quiser usar o valor de uma variável de ambiente que é alterada em um loop, será necessário usar setlocal enabledelayedexpansion e !var! em vez de %var% .

Aqui está uma versão corrigida do arquivo de lote:

@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

Leitura Adicional

por 29.03.2016 / 11:38