web-dev-qa-db-ja.com

Windowsのファイル名に変数を渡すFOR / DOバッチファイル

私は体系的に各ファイルを個別に調べて圧縮する次のコードを持っています。ファイル名は関係ありませんが、多かれ少なかれ非表示にしたいので、各ファイルを「ファイル1」、「ファイル2」、「ファイル3」などと呼びます。

しかし、変数fn=file!count!を7z.exeコマンドラインに渡すにはどうすればよいですか?変数が機能していることを確認するために、echoコマンドを追加しました。しかし、7zコマンドラインでfnを実際の「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

正しくインクリメントされ、file ##も正しく解決されていることを確認できる出力の例:

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 . . .
2
HTWingNut

私はあなたがする必要があるすべてがcall something

Obs .:セット/ Aカウント+ = 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!
   echo\ 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 echo\7z.exe a -mx9 -mmt12 -sdel -pt3st! -mhe=on "!fn!.7z" "%%~nxa"
)
endlocal
1
It Wasn't Me