web-dev-qa-db-ja.com

7-zipを使用した/ R無限ループのWindowsバッチを解決するための支援が必要

このスクリプトの一部を使用して、フォルダー構造でファイルを再帰的に個別に暗号化/圧縮します。

ある特定のフォルダに戻って、すでに圧縮されているファイルの圧縮を開始するように見えることを除いて、機能します。何が原因なのかよくわかりません。

フォルダ内のファイル名もすべて一貫しています(画像です)。 「2017-08-16 18.16.51.jpg」のように。各ファイルが圧縮されると、すべてのサブフォルダー内のすべてのファイルを通過するまで、ファイルにfile1.7zfile2.7zfile3.7zという名前が付けられます。

コードは次のとおりです。

SETLOCAL DISABLEDELAYEDEXPANSION
...
...
<MORE SCRIPT HERE>
...
...

set count=0
for /r "%sourcedir%" %%a in (*) do (
CLS
set /A count+=1
SETLOCAL EnableDelayedExpansion
set fnz=file!count!.7z

ECHO ***
ECHO *** ENCRYPTING "%%a" as "!fnz!"
ECHO ***
ECHO *** FILE NUMBER !count! OUT OF !files! 
ECHO ***
ECHO %%a !fnz! >> "!batchdir!7Zip_FILEREF_!folderzip!.txt"

!batchdir!7z.exe a -mx9 -sdel -p"!password!" -mhe=on "%%~dpa!fnz!" "%%a" >nul

ENDLOCAL
)

...
...
<MORE SCRIPT HERE>
...
...
ENDLOCAL

変数batchdirおよびfolderzipは、スクリプトの前半で設定されています。

これは、ログが最後のファイルから反転して、すでに圧縮されているファイルfile100.7zの圧縮を開始するときのログからの出力例です。左側のファイル/フォルダーは、圧縮されているファイルです。右側のファイルfile###.7zは、zipファイル名です。

E:\Temp\MDISC\Personal Test C17\Pictures\Camera 2017\2017-08-13 13.24.18.jpg file961.7z 
E:\Temp\MDISC\Personal Test C17\Pictures\Camera 2017\2017-08-13 13.25.02.mp4 file962.7z 
E:\Temp\MDISC\Personal Test C17\Pictures\Camera 2017\2017-08-14 18.03.02.mp4 file963.7z 
E:\Temp\MDISC\Personal Test C17\Pictures\Camera 2017\2017-08-15 12.33.20.jpg file964.7z 
E:\Temp\MDISC\Personal Test C17\Pictures\Camera 2017\2017-08-16 18.16.51.jpg file965.7z 
E:\Temp\MDISC\Personal Test C17\Pictures\Camera 2017\2017-08-16 18.16.53.jpg file966.7z 
E:\Temp\MDISC\Personal Test C17\Pictures\Camera 2017\2017-08-16 18.18.26.jpg file967.7z 
E:\Temp\MDISC\Personal Test C17\Pictures\Camera 2017\2017-08-16 18.18.27.jpg file968.7z 
E:\Temp\MDISC\Personal Test C17\Pictures\Camera 2017\2017-08-16 18.18.29.jpg file969.7z 
E:\Temp\MDISC\Personal Test C17\Pictures\Camera 2017\2017-08-17 13.10.56.jpg file970.7z 
E:\Temp\MDISC\Personal Test C17\Pictures\Camera 2017\2017-08-18 06.59.19.jpg file971.7z 
E:\Temp\MDISC\Personal Test C17\Pictures\Camera 2017\BMPhoneWallpaper.png file972.7z 
E:\Temp\MDISC\Personal Test C17\Pictures\Camera 2017\file100.7z file973.7z 
E:\Temp\MDISC\Personal Test C17\Pictures\Camera 2017\file101.7z file974.7z 
E:\Temp\MDISC\Personal Test C17\Pictures\Camera 2017\file102.7z file975.7z 
E:\Temp\MDISC\Personal Test C17\Pictures\Camera 2017\file103.7z file976.7z 
E:\Temp\MDISC\Personal Test C17\Pictures\Camera 2017\file104.7z file977.7z 
E:\Temp\MDISC\Personal Test C17\Pictures\Camera 2017\file105.7z file978.7z 
E:\Temp\MDISC\Personal Test C17\Pictures\Camera 2017\file106.7z file979.7z 
E:\Temp\MDISC\Personal Test C17\Pictures\Camera 2017\file107.7z file980.7z 
E:\Temp\MDISC\Personal Test C17\Pictures\Camera 2017\file108.7z file981.7z 
E:\Temp\MDISC\Personal Test C17\Pictures\Camera 2017\file109.7z file982.7z 
E:\Temp\MDISC\Personal Test C17\Pictures\Camera 2017\file110.7z file983.7z 

私が言ったように、これまでのところ、これはこの1つのサブフォルダーCamera 2017だけです。 Camera 2014Camera 2015Camera 2016などの他のフォルダがあります。Zipはまったく問題ありません。

1
HTWingNut

For/rループは、ファイルをアルファベット順にファーシングし、実行中およびファイルを作成しているため、ファーシングを続行します。

Areon.jpg  ->file22.7z

Banana.jpg ->file23.7z

Canon.jpg  ->file24.7z

Dallas.jpg ->file25.7z

Elephant   ->file26.7z

file01.7z  ->file27.7z

「f」に達すると、7Zipで作成したファイルがリストに含まれ始めます。

ソースの宛先ファイルが同じである場合、その問題は発生しないと思います。

Areon.jpg  ->Areaon.7z
Banana.jpg ->Banana.7z
Canon.jpg  ->Canon.7z

とにかく、ファイルを作成する操作で作業している場合は、/ rは最適なオプションではありません。

For/fをdirコマンドと組み合わせて使用​​することをお勧めします。

for /f "Delims=" %%a in ('dir /a-d /b /s /a "%sourcedir%\*"') do (

の対象:

for /r "%sourcedir%" %%a in (*) do (
2
Ricardo Bohner