1

元のアーカイブ ファイルがまだ存在するため、不要になり、削除できる「圧縮されていないアーカイブ フォルダ」を見つけることができるバッチ ファイルまたはユーティリティが必要です。

重要なのは、「非圧縮フォルダー」と「元のアーカイブ ファイル」は、アーカイブ ファイルのファイル拡張子を除いて、常に同じ名前を持つことです。何も自動的に削除したくありません。手動でチェックアウトできるフォルダーのリストを作成したいだけです。したがって、シーケンスは 4 ステップのプロセスになります。

1) *.zip、*.rar、*.iso などのワイルドカードを使用してすべてのアーカイブ ファイルを検索します。 2) 見つかったすべてのファイル名のリストを作成します (ファイル拡張子を除く)。これらの名前のフォルダーを検索します。 4) 手順 3 で見つかったフォルダーを含むテキスト ファイルを作成します。

これらの投稿で見つけたバッチ ファイルを変更しようとしましたが、機能せず、最初からやり直したいと思います。どんな助けでも大歓迎です。

ありがとう

4

2 に答える 2

0

わかりました、私はこれを段階的に行います:

ステップ1:

set dir="C:\...[path to root directory]" 
where /r %dir% *.zip *.iso *.rar >> log.txt

whereWindows 7 を使用している場合は、ユーティリティがコンピュータ上にある必要があります。

ステップ2:

ren log.txt log.tmp
for /f "delims=." %%a in (log.tmp) do (Echo %%a >> log.txt)
del log.tmp

上記のコードは、ピリオドを含むファイル名を処理しません

ステップ 3:

for /f "tokens=*" %%a in (log.txt) do (
where /r %dir% %%a* >> files.txt
)

上記が機能するかどうか 100% 確信があるわけではありません。機能しない場合は教えてください。

ステップ 4:

Rem This code will handle file paths to directories
Ren files.txt files.tmp
for /f "tokens=*" %%a in (files.tmp) do (
Echo %%~pa >> files.txt
)
del files.tmp

Rem The below code will ged rid of repeated direcotries
ren files.txt files.tmp
Echo. > files.txt

setlocal enabledelayedexpansion
for /f "tokens=*" %%a in (files.tmp) do (
set var=1
for /f "tokens=*" %%b in (files.txt) do (
if "%%~a" equ "%%~b" set var=0
)
if !var!==1 Echo %%a >> files.txt
)
del files.tmp

そして、私はそれがうまくいくはずだと確信しています。もちろん、私はこれをテストしていませんが、@Echo onエラーが発生した場合にあなたを助けることができるように、各セクト間で (または個別のバッチ ファイルとして) 一時停止コマンドを使用してこれらすべてを実行します。

これがお役に立てば幸いです、モナ。

于 2013-11-11T22:45:27.553 に答える
0
@echo off

    setlocal enableextensions

    set "rootDir=d:\_data_"
    set "fileList=%~dp0\%~n0.files.list"
    set "folderList=%~dp0\%~n0.folders.list"

    rem generate list of compressed files names
    break > "%fileList%"
    for /F "tokens=*" %%f in ('where /r "%rootDir%" *.zip *.rar *.iso *.7z 2^>nul') do (
        >> "%fileList%" echo %%~nf
    )

    rem check compressed file list against directory list
    break > "%folderList%"
    for /F "tokens=*" %%f in ('dir "%rootDir%" /s /b /ad ^| findstr /e /g:"%fileList%" ') do (
        >> "%folderList%" echo %%f
    )

    type "%folderList%"

    endlocal
于 2013-11-12T08:12:28.467 に答える