Nested For Command ajuda por favor

1

Eu estou tentando adquirir o nome do arquivo da primeira parte de um loop aninhado para uso na última parte ou seja (todo o arquivo extraído de "09-10-15.zip" será nomeado "file1.09-10-15 "," ficheiro2.09-10-15 "...

Mas estou recebendo null usando set FileExt = %% ~ ni se eu definir o valor estático como um teste, vejo que não está atingindo minha última linha.

Agora estou oficialmente com uma perda completa, qualquer ajuda seria muito apreciada.

@ECHO OFF
EnableDelayedExpansion
for /r d:\ %%j in (*.zip) do (
set FileExt="%%~ni"
"c:\program files (x86)\winzip\wzunzip.exe" -d "%%j" C:\AllDWG\
for /r C:\AllDWG\ %%i in (*.dwg) do ren "%%i" "%%~ni.%FileExt%"
)
    
por Mark K 14.10.2016 / 22:20

1 resposta

0

Estou tentando adquirir o nome do arquivo da primeira parte de um loop aninhado

@ECHO OFF
EnableDelayedExpansion
for /r d:\ %%j in (*.zip) do (
set FileExt="%%~ni"
"c:\program files (x86)\winzip\wzunzip.exe" -d "%%j" C:\AllDWG\
for /r C:\AllDWG\ %%i in (*.dwg) do ren "%%i" "%%~ni.%FileExt%"
)

Existem vários erros no seu arquivo de lote.

EnableDelayedExpansion

Esta é a sintaxe errada (veja delayedexpansion ), deve ser setlocal enabledelayedexpansion .

set FileExt="%%~ni"

A variável i é indefinida neste momento (seu primeiro for loop está usando %%j ), então deve ser set FileExt="%%~nj" .

for /r C:\AllDWG\ %%i in (*.dwg) do ren "%%i" "%%~ni.%FileExt%"

Você precisa usar a expansão atrasada aqui, pois %FileExt% tem um diferente valor em cada passagem pelo loop for envolvente, por isso deve ser !FileExt! .

Tente o seguinte arquivo em lote (não testado, pois não tenho um arquivo zip apropriado):

@echo off 
setlocal enabledelayedexpansion
for /r d:\ %%j in (*.zip) do (
  set FileExt="%%~nj"
  "c:\program files (x86)\winzip\wzunzip.exe" -d "%%j" C:\AllDWG\
  for /r C:\AllDWG\ %%i in (*.dwg) do ren "%%i" "%%~ni.!FileExt!"
  )
endlocal  

Leitura Adicional

por 14.10.2016 / 23:56