バッチファイルを使用してファイルを個別のzipファイルとして圧縮する


10

したがって、バッチファイルで7zipを使用して、フォルダー内のファイルを取得し、個別のファイルとして圧縮しようとしています。したがって、最初のファイルは独自のzipアーカイブを取得し、次のファイルも同様に取得します。私はインターネットを見ていて、たくさんの異なるコードを試しました。これまでのところ、それらを単一のzipファイルとして圧縮することに成功し、デスクトップに出力しました。

残念ながら私はそれをしたコードを失いました、そして今、私はこれで行き詰まり、何もしないようです。

@echo on
cd "C:\Users\MVD21\Desktop\test"
FOR %%i IN (C:\Users\MVD21\Desktop\test) DO 7z.exe a "%~ni.7z" "%i"
pause

各ファイルに独自のzipアーカイブを持たせ、zipアーカイブでファイル名を共有して、拡張子を除いたものにしたい。

どんな助けでも大歓迎です。


また、Windows 10の組み込みのzip機能を使用してこれを行う簡単な方法がある場合も問題ありません。
Mike Van Dunk

回答:


4

各ファイルに独自のzipアーカイブを持たせ、zipアーカイブでファイル名を共有して、拡張子を除いたものにしたい。

バッチスクリプト

(ソースと宛先の完全明示フォルダーパスを上に設定し、必要に応じて実行します。ソースは、圧縮するファイルが存在する場所であり、宛先は、圧縮するファイルの場所です。)

@ECHO ON

SET SourceDir=C:\folder\source
SET DestDir=C:\folder\destination

CD /D "C:\Program Files\7-Zip"
FOR /F "TOKENS=*" %%F IN ('DIR /B /A-D "%SourceDir%"') DO (
    7z.exe a "%DestDir%\%%~NF.zip" "%SourceDir%\%%~NXF"
)
EXIT

コマンドライン

FOR /F "TOKENS=*" %F IN ('DIR /B /A-D "C:\Folder\Source"') DO 7z.exe a "C:\Folder\Dest\%~NF.zip" "C:\Folder\Source\%~NXF"

その他のリソース


4

元のスクリプトは、行ごとに次のことを行います。

@echo on

コマンドプロンプトに、実行する前にバッチファイルの各コマンドを出力するように指示します。これは、実行前に実際に何が実行されているかを「確認」できるようにするためです。

cd "C:\Users\MVD21\Desktop\test"

Cの hangesは、D私はあなたがすべてのファイルをzip圧縮するパスであると思います何にirectory。

FOR %%i IN (C:\Users\MVD21\Desktop\test) DO 7z.exe a "%~ni.7z" "%i"

ここのパラメータIN(C:\Users\MVD21\Desktop\test)です。これにより、ループの「本体」(キーワードの背後にあるアクションDO)が1回だけ実行され、%iパラメーターに値が割り当てられますC:\Users\MVD21\Desktop\test。これがあなたの望むことをしないのは当然のことです!これは、ディレクトリ全体を単一の.7zファイルに圧縮するように見えます。

何も実行しない場合は、おそらくのパスが見つからないことが原因です7z.exe。そのファイルが現在のディレクトリ(test上記のディレクトリ)にない場合は、PATH%PATH%環境変数の)上になければなりません。echo %PATH%シェルで現在設定されているものを確認してください。それ以外の場合は7z.exe、現在のディレクトリにコピーするか、その場所への絶対パス(たとえば、"C:\Program Files\7-zip\7z.exe" ...)を指定する必要があります。

pause

スクリプトが完了すると、このキーワードはシェルに、すぐに終了するのではなく、Enterキーを押すかコマンドプロンプトを閉じるのを待つように指示するだけです。


バッチスクリプト(または、実際、コードを扱う他の何か)を構築しているときは、スクリプト全体を、理解できない(試みない)モノリシックコピー/ペーストとして扱うのをやめ、代わりに個別に理解できるサブパーツに問題を解決し、それらを一緒にフックします。これにより、他の誰かにすべての作業を依頼する代わりに、問題を個別に解決して解決策を作成できます。私はそれを強くお勧めします。

あなたの場合、あなたの問題の次のサブコンポーネントがあります:

  1. 特定のディレクトリに含まれる各ファイルを反復処理(ループスルー)します。
  2. 指定されたファイルごとに、7zユーティリティを呼び出して.7zファイルに入れます。

特定のニーズを解決する回答がすでに出ている可能性は、より一般的な部分を個別に見つけることができる可能性よりも低くなります。

この質問、「バッチスクリプトでディレクトリ内の各ファイルに何かを行う方法」は、問題の半分を解決します。

答えの要点は、StackOverflowの答えのこの部分から始めることです。

for /f "usebackq delims=|" %%f in ('dir /b "c:\program files"') do echo %%f

そして、何かをしている部分(echo %%f)を、やりたいことをするように変更します。スクリプトのテキストを分析し、各文字とパラメーターの意味を理解したので、その部分を変更する必要があることを知っています。自分のコードを挿入する場所を推測できます。

ここにいくつかの「エアコード」があります(試されていない!):

for /f "usebackq delims=|" %%f in ('dir /b "C:\Users\MVD21\Desktop\test"') do 7z.exe a "%~ni.7z" "%i"

上記の@echo onand pauseステートメントは適切な方法であるため、そのままにしておくことがcdできます。ファイルがそのパスにある場合は、そのステートメントも保持することをお勧めします。

それでは、何が残っているのでしょうか?

@echo on
cd "C:\Users\MVD21\Desktop\test"
for /f "usebackq delims=|" %%f in ('dir /b "C:\Users\MVD21\Desktop\test"') do 7z.exe a "%~nf.7z" "%f"
pause

「うまくいかない!」と返信しても、お役に立てません。これを試しても機能しない場合、コメントで以下の情報を教えてください。

  • どのような正確なエラーメッセージこれらのコマンドを実行すると、プロンプトのコマンドで取得したり、バッチファイルに入れ、それらを実行していますか?省略しないでください。出力を直接コピーして貼り付けます(大量の場合は、http://pastebin.comに置きます)。
  • あなたは何を考えて、エラーメッセージが問題であることを言っていますか?
  • 7-zipインストールはどこにありますか(ファイルパス)?
  • 7-zipインストールのファイルの場所がPATH環境変数の内容に含まれていますか?(上記のようecho %PATH%に、cmdプロンプトでこれを確認してください。)

7zipが別のドライブにインストールされているので、これは機能していないと思いますか?元の答えのようにcd "Location of 7zip"を実行するとうまくいくようです。もちろん、それは「時々」しか機能しません。その下に別のechoステートメントを挿入するまで機能していましたが、現在は機能していません。そしてはい、私はバッチファイルについてもっと理解しようとしています。バッチコマンドの用語集や勉強しないものを探しているので、実際に理解しています。私を信じて、私はむしろそれを機能させるだけでなく、理解して機能させたいと思っています。
Mike Van Dunk

私はあなたの解決策を試してみましたが、バッチファイルがまったく実行されないため、出力は何であるかわかりません。コマンドウィンドウが点滅している状態で簡単に開き、再び閉じます。はい、一時停止しています。ローカルドライブとセカンダリ内蔵ドライブの両方に7zipをインストールしましたが、パス環境の一部ではないようです
Mike Van Dunk

本当に理解したいのですが、googleを検索してもあまり役に立ちません。たとえば、その「dir / b」コマンドまたはパラメーターが何であるか、またはそれが何をしているのか、私にはわかりません。dirは明らかにディレクトリですが、/ bはわかりません。パラメータが何をしているかを誰かに説明してもらい、理解を深めてもらいたいと思います。または、誰かがこのようなことについて役立つサイトへのリンクを持っている場合も役立ちます。バッチファイルで「dir / b」をグーグル検索しましたが、実際には何も見つかりませんでした。私が考える / bがファイル名で行う何かを持っているが、私はわかりませんよ。
Mike Van Dunk
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.