そのため、7Zipをバッチファイルで使用して、フォルダー内のファイルを取得し、個別のファイルとしてZip圧縮しようとしています。したがって、最初のファイルは独自のZipアーカイブであり、次のファイルも同様です。私はインターネットを見ていて、たくさんの異なるコードを試しました。これまでのところ、それらを単一の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アーカイブでファイル名を共有して、拡張子を除いたものにしたい。
どんな助けでも大歓迎です。
各ファイルに独自のZipアーカイブを持たせ、Zipアーカイブでファイル名を共有して、拡張子を除いたものにしたい
(ソースと宛先の完全明示フォルダーパスを上に設定し、必要に応じて実行します。ソースは、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"
元のスクリプトは、行ごとに次のことを行います。
_@echo on
_
コマンドプロンプトに、実行する前にバッチファイルの各コマンドを出力するように指示します。これは、実行前に実際に何が行われているかを「確認」できるようにするためです。
_cd "C:\Users\MVD21\Desktop\test"
_
[〜#〜] c [〜#〜]がハングする[〜#〜] d [〜#〜] すべてのファイルをZipで圧縮したいパスに私が望むものへの方向性。
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キーを押すかコマンドプロンプトを閉じるのを待つようにシェルに指示するだけです。
バッチスクリプト(または、実際にはコードを処理する他のすべてのもの)を構築しているときは、スクリプト全体を、理解していない(試みた)モノリシックコピー/ペーストとして扱うのをやめ、代わりに個別に理解できるサブパーツに問題を解決し、それらを一緒にフックします。これにより、他の誰かにすべての作業を依頼する代わりに、問題を個別に解決し、create解決策を実行できます。私はそれを強くお勧めします。
あなたの場合、あなたの問題の次のサブコンポーネントがあります:
7z
_ユーティリティを呼び出して、.7zファイルに入れます。特定のニーズを解決する回答がすでに出ている可能性は、より一般的な部分を個別に見つけることができる可能性よりも低くなります。
この質問、「バッチスクリプトでディレクトリ内の各ファイルに何かを行う方法」 は問題の半分を解決します。
答えの要点は、StackOverflowの答えのこの部分から始めることです。
for /f "usebackq delims=|" %%f in ('dir /b "c:\program files"') do echo %%f
そして、何かをしている部分を変更します(_echo %%f
_)あなたがやりたいことを行うように。スクリプトのtextを分析し、各文字とパラメーターの意味を理解したので、その部分を変更する必要があることはわかっています。自分のコードを挿入します。
ここにいくつかの「空気コード」があります(試されていない!):
for /f "usebackq delims=|" %%f in ('dir /b "C:\Users\MVD21\Desktop\test"') do 7z.exe a "%~ni.7z" "%i"
上記の_@echo on
_および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
_
「それが機能しない!」と返信した場合、私はあなたを助けません。これを試しても機能しない場合は、[〜#〜]必須[〜#〜]次の情報をコメントで教えてください:
PATH
環境変数の内容に含まれていますか? (上記のように、cmd
プロンプトで_echo %PATH%
_を使用してこれを確認してください。)