Se você usar seu script original e adicionar setlocal enabledelayedexpansion
, poderá substituir %start%
e %end%
por !start!
e !end!
e seu script funcionará como você pretendia.
Seu script não permite espaços em branco nos nomes dos arquivos, então proponho o seguinte script modificado: -
echo off
setlocal enabledelayedexpansion
cd \
set start=
set end=
set paths=
type NUL > output.txt
for /f "tokens=* skip=3" %%l in (C:\test.txt) do ^
for /f "tokens=1-2*" %%d in ("%%l") do ^
if %%d==Directory (
set start="%%f"
) else (
for /f "tokens=3*" %%j in ("%%l") do ^
if %%j==^<JUNCTION^> (
for /f "tokens=1 delims=[" %%n in ("%%k") do set end=%%n
set end="!end:~0,-1!"
echo !start! !end! >> output.txt
)
)
Eu fiz duas coisas adicionais aqui: -
- Eu removi os colchetes dos comandos que não precisam dele (infelizmente, a nova linha após o caractere de continuação
^
não pode ser recuada, o que estraga a formatação do segundoif
). - Eu removi
for
loops desnecessários enquanto ao mesmo tempo permitia espaços em branco incorporados nos nomes de diretórios e arquivos.
Deixei-os, mas as inicializações cd \
e set
são desnecessárias, embora você queira limpar start
e end
antes de sair.