将变量传递给 Windows FOR/DO 批处理文件中的文件名

将变量传递给 Windows FOR/DO 批处理文件中的文件名

我有以下代码,其中我系统地浏览并单独压缩每个文件。我不关心文件名是什么,但我希望它或多或少被隐藏,所以将每个文件称为“文件 1”、“文件 2”、“文件 3”等。

但是我该如何将变量传递fn=file!count!给 7z.exe 命令行?我添加了echo命令只是为了确保变量正常工作,而且确实如此。但是我该如何让 fn 在 7z 命令行中解析为实际的“file1”、“file2”等?我试过 %、!、%!、!%、%%... 哈哈。它只会给出一个空白文件名或 !fn! 或 %fn%,而不是实际的变量值。

代码在这里,提前感谢任何帮助:

setlocal enableextensions enabledelayedexpansion
cd /d E:\Temp\ziptest\Documents
set /A count=0
for /r %%a in (*) do (
cd "%%~pa" 
set /A count += 1
echo !count!
set fn=file!count!
echo !fn!
pause
REM 7z.exe a -mx9 -mmt12 -sdel -pt3st! -mhe=on "!fn!.7z" "%%~nxa"
)
endlocal

输出示例,您可以看到它正确递增并且正确解析文件##:

E:\Temp\ziptest>setlocal enableextensions enabledelayedexpansion

E:\Temp\ziptest>cd /d E:\Temp\ziptest\Documents

E:\Temp\ziptest\Documents>set /A count=0

E:\Temp\ziptest\Documents>for /R %a in (*) do (
cd "%~pa"
 set /A count += 1
 echo !count!
 set fn=file!count!
 echo !fn!
 pause
 REM 7z.exe a -mx9 -mmt12 -sdel -pt3st! -mhe=on "!fn!.7z" "%~nxa"
)

E:\Temp\ziptest\Documents>(
cd "\Temp\ziptest\Documents\"
 set /A count += 1
 echo !count!
 set fn=file!count!
 echo !fn!
 pause
 REM 7z.exe a -mx9 -mmt12 -sdel -pt3st! -mhe=on "!fn!.7z" "Book1.xlsx"
)
1
file1
Press any key to continue . . .

E:\Temp\ziptest\Documents>(
cd "\Temp\ziptest\Documents\"
 set /A count += 1
 echo !count!
 set fn=file!count!
 echo !fn!
 pause
 REM 7z.exe a -mx9 -mmt12 -sdel -pt3st! -mhe=on "!fn!.7z" "COVID-19 Oakland County.xlsx"
)
2
file2
Press any key to continue . . .

答案1

我有补牙材料,你需要做的就是call something

注意:删除多余的空间并使用set /A count[espace]+=1@echo off并替换%%~pa%%~dpa

@echo off 

cd/d "E:\Temp\ziptest\Documents"
setlocal enabledelayedexpansion

for /r %%a in (*) do (
   set /A "count+=1+0"
   cd /d "%%~dpa"
   set "fn=file!count!"
   echo\!fn! 
   echo\!count!
   7z.exe a -mx9 -mmt12 -sdel -pt3st -mhe=on "!fn!.7z" "%%~nxa"
  )

endlocal
  • 对压缩选项进行排序...
@echo off 

cd /d "E:\Temp\ziptest\Documents" && setlocal enabledelayedexpansion
for /r %%a in (*)do set /A "count+=1+0" && cd /d "%%~dpa" && call set "fn=file!count!" && (
echo\!fn! & echo\!count! && call 7z.exe a -mx9 -mmt12 -sdel -pt3st! -mhe=on "!fn!.7z" "%%~nxa"
)
endlocal

相关内容