2017-02-03 8 views
0

スペースを節約し、整理するために、私は自分のローカルおよびネットワーク上のフォルダにたくさんのファイルを圧縮しています。これらは主にstp、igsなどのCADファイルです。zipファイルまたはrarファイルに1つ以上のファイルが含まれているかどうかを確認する方法?

すでに存在するzipファイルがありますが、他のユーザーによって抽出されたファイルもありますが、zipファイルはまだフォルダ上に存在し、スペースを消費します。

コマンドラインのzip、rar、7zはありますか。アーカイブファイルに1つのファイルのみが含まれているかどうかを調べる

1つのファイルを含むアーカイブを現在のディレクトリに展開しながら、1つ以上のファイルを含むファイルを\archivename\というフォルダに展開するので、これを理解したいと思います。それ以外の場合、30個のSTPファイルを持つ1つのフォルダに30個のフォルダと30個のファイルがあります。

私は現在抽出し、別のプログラムは、重複をチェックするために、その後、WinRARのバッチファイルの拡張子に基づいてそれらを再圧縮するWinRARのでバッチファイルを使用します。 (理由:人々はさまざまなアーカイブ方法を使用して、ファイルの重複がすべての上にあります。)

サンプルバッチファイル:

for /F "delims=," %%f in ('dir *.stp /B') do (%path% a -afzip -r- -m5 -ed -ep -or -tl -y -df "%%f".zip "%%f") 

for /F "delims=;" %%f in ('dir *.7z /B /S') do (%path% x -OR -ilogC:\Users\XXXX\Desktop\myLog.txt "%%f" "%%~dpf"\"%%~nf"\) 

私はZIP内のファイル数を確認することができたら、私は追加します再帰関数。

私はNTFS圧縮を使用することができますが、フォルダを整理したいと思います。フォルダには1000個のファイルがありますが、これを1に減らしたいと思います。これらは主にアーカイブ目的です。

ご迷惑をおかけして申し訳ございません。私はこの作業のために、次のコメントのバッチファイル示唆

+0

私はWinzipのは、それを抽出することなく、zipファイル内にあるものを一覧表示する機能があります知っています。私は7zipとWinrarもそうすると思います。それらのドキュメントを見ましたか? – Squashman

答えて

0

@echo off 
setlocal EnableExtensions DisableDelayedExpansion 

rem Extract all 7-Zip, RAR and ZIP archives in current directory into 
rem subdirectories with name of archive file as name for subdirectory (-ad) 
rem with running WinRAR for extraction in background (-ibck) which means 
rem minimized to system tray with restoring also last access time (-tsa) 
rem and creation time (-tsc) if existing in archive file and with skipping 
rem files on extraction perhaps already present in the subdirectory with 
rem same last modification time (-u), but overwriting automatically older 
rem files in subdirectory if archive file contains an existing file with 
rem a newer last modification time (-y) ignoring all errors (also -y). 

for %%I in (7z rar zip) do "%ProgramFiles%\WinRAR\WinRAR.exe" x -ad -ibck -tsa -tsc -u -y *.%%I 

rem If a subdirectory contains only 1 file, move that file to the current 
rem directory with overwriting a perhaps already existing file with same 
rem name in current directory and then remove the subdirectory. 

for /D %%I in (*) do call :CheckSubDir "%%I" 

rem Exit processing of the batch file without fall through to subroutine. 
endlocal 
goto :EOF 

rem The subroutine CheckSubDir first checks for directories in directory 
rem passed as parameter to the subroutine. A directory containing at 
rem least one subdirectory is kept without any further processing. 

rem If the directory does not contain a subdirectory, it searches for files 
rem in the directory. If there are at least 2 files, the directory is kept 
rem without any further processing. 

rem But if the directory contains only 1 file, this file is moved to 
rem current directory. Then the empty directory is deleted before exiting 
rem the subroutine and continue batch file processing in calling loop. 
rem Each directory containing no subdirectory and no file is removed, too. 

:CheckSubDir 
for /F "delims=" %%D in ('dir /AD /B "%~1\*" 2^>nul') do goto :EOF 
setlocal EnableDelayedExpansion 
set FileCount=0 
for /F "delims=" %%F in ('dir /A-D /B "%~1\*" 2^>nul') do (
    set /A FileCount+=1 
    if !FileCount! == 2 endlocal & goto :EOF 
    set "FileName=%%F" 
) 
if %FileCount% == 1 move /Y "%~1\%FileName%" "%FileName%" 
rd "%~1" 
endlocal 
goto :EOF 

をこのバッチファイルはWinRARのを使用して実行時に何をするかについてのコメントをお読みください。
バッチファイルには、実際のコマンドラインよりもはるかに多くのコメント行が含まれています。最後の二つの

2>nulループのためのディレクトリまたはそれを抑制するために、デバイスNULに見つかりませんでしたファイルの場合にSTDERRを処理するために、DIRコマンドによりエラーメッセージ出力をリダイレクトします。リダイレクト演算子>DIRコマンドラインの実行ではなく、既にコマンドラインのを解析する上でのリダイレクト演算子として解釈される文字キャレット^とここにエスケープする必要があります。

WinRARは、抽出時に多くのアーカイブタイプをサポートしています。しかしWinRAR.exeはGUIアプリケーションであるため、コンソールへのアーカイブファイルの内容の一覧表示はサポートされていません(Rar.exeサポート)。

コンソールバージョンRar.exeだけでなく、自由なコンソールアプリケーションUnRAR.exeサポートの両方さまざまな形式でSTDOUTを処理するために、アーカイブファイルの内容を一覧表示します。

WinRAR.exeRar.exe/UnRAR.exeの間でサポートされているコマンドのこの差はWinRARの中の開口部により、メニューのメニュー項目のヘルプヘルプトピックをクリックしてヘルプを見ることができ、ヘルプ]タブ上の開口部内容リスト項目コマンドラインモード、リストアイテムコマンドを開き、リストアイテムをクリックします。アルファベットコマンドリストをリストし、このリストとテキストファイルRar.txtに記載され説明されているコマンドと比較すると、WinRARこれはコンソール版のマニュアルです。

Rar.txtリストと説明:

リットル[T [A]、B] ... [裸技術[すべて]、]リストのアーカイブの内容
V [T [A]、B]。 ..冗長にアーカイブの内容をリストアップする[technical [all]、bare]。 WinRARの

ヘルプコマンドリットルもコマンドVが含まれているかどうかを行います。

上記のバッチファイルで行ったように、ファイルをカウントし、* .RARアーカイブファイルを抽出するために、ライン出力の数をカウントし、コマンドlb各* .RARファイルにRar.exeまたはUnRAR.exeを実行することももちろん可能です現在のディレクトリの行数(1行のみ)またはサブディレクトリに依存します。

しかし、ベアリスト形式と1行のみの出力を使用する場合、この行はアーカイブファイルの名前またはアーカイブされた空のフォルダの名前である可能性があることを考慮する必要があります。このソリューションは、標準リストコマンドを使用しており、ディレクトリには属性Dがあり、ファイルにはこの属性がないため、属性をさらに分析します。

* .7zと* .zipファイルの場合は、7z.exeまたは7za.exeを使用してコード化する必要があります。 7-ジップのヘルプは、WinRARのような使用可能なコマンドとスイッチについても説明しています。

しかし、ファイルアロケーションテーブルのエントリが変更され、データがないため、アーカイブファイルを一度抽出する必要があり、ファイルを移動する速度が非常に速いため、これらの努力はあまり意味がありません。コピーまたは移動されたただ、アーカイブファイルの内容を一覧リストを分析し、抽出のためのアーカイブファイルに再び7 - ジップまたはするRarを実行することは非常にある最初に別々に7 - ジップまたはするRarを実行

実行するよりも遅いWinRARすべてのアーカイブを抽出していくつかのファイルを移動し、いくつかのディレクトリを削除するには、3回(またはそれ以下)使用するコマンドを理解し、どのように彼らは、コマンドプロンプトウィンドウを開き、そこに次のコマンドを実行し、完全にページが非常に慎重に、各コマンドのために表示されているすべてのヘルプを読んで、仕事のため

  • call /?
  • dir /?
  • echo /?
  • endlocal /?
  • for /?
  • goto /?
  • move /?
  • rd /?
  • set /?
  • setlocal /?

のMicrosoft TechNetの記事Using command redirection operatorsも参照してください。

0

次のバッチでは、最後の行をフィルタリングしてアーカイブに含まれるファイルの数を取得するために、7z.exe(パス経由でアクセス可能)リスト(l)-optionを使用しています。

@Echo off 
Set Base=q:\Test 
Pushd "%Base%" 
For /f "delims=" %%A in (
    'Dir /B/S/A-D *.zip *.7z *.rar' 
) Do For /f "tokens=5" %%B in (
    ' 7z.exe l "%%~A" ^| findstr "files$" ' 
) Do If %%B equ 1 (
    Echo Archive %%A contains 1 file 
) else (
    Echo Archive %%A contains %%B files 
) 
Popd 

サンプル出力:

Archive q:\Test\archiv.7z contains 135 files 
Archive q:\Test\PoSh\powershellitunes\PowerScript-itunes.7z contains 1 file 
Archive q:\Test\PoSh\_pdf_itextsharp\extract_pdf_pages_into_new_323689.zip contains 3 files 
Archive q:\Test\_StackOverflow\Noodles\Filter0.8.zip contains 4 files 
Archive q:\Test\2016\12\16\Path.rar contains 7 files 
Archive q:\Test\_AllHelp.Win\allhelp.zip contains 7 files 
Archive q:\Test\2017-02\pkzipc_40.rar contains 10 files 
関連する問題