请帮助嵌套命令

请帮助嵌套命令

我正在尝试从嵌套循环的第一部分获取文件名以用于最后一部分,即(从“09-10-15.zip”中提取的所有文件将被命名为“file1.09-10-15”,“file2.09-10-15”...

但是,如果我将值设置为静态作为测试,则使用 set FileExt=%%~ni 时得到 null,我发现它没有到达最后一行。

我现在正式陷入彻底的迷茫,任何帮助都将不胜感激。

@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%"
)

答案1

我正在尝试从嵌套循环的第一部分获取文件名

@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%"
)

您的批处理文件中有几个错误。

EnableDelayedExpansion

这是错误的语法(见延缓扩张), 它应该是setlocal enabledelayedexpansion

set FileExt="%%~ni"

i此时变量未定义(您的第一个for循环正在使用%%j),因此应该是set FileExt="%%~nj"

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

你需要使用延迟扩张这里,由于%FileExt%每次通过封闭循环时都有不同的值for,所以应该是!FileExt!

尝试以下批处理文件(由于我没有合适的 zip 文件,因此未经测试):

@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  

进一步阅读

相关内容