これが私の状況です。プロジェクトには、一部の添付ファイルを別のシステムに移行することを目的としています。
これらの添付ファイルは親フォルダに配置され、たとえば「」と言います(理解を深めるためにこの質問の図Folder 0
を参照してください)。これらの添付ファイルは圧縮/圧縮されます。
バッチスクリプトを次のように呼び出したい:
BatchScript.bat "c:\temp\usd\Folder 0"
7za.exe
コマンドライン抽出ツールとして使用しています。
バッチスクリプトで実行したいのは、 " Folder 0
"のサブフォルダーを反復処理し、含まれているすべてのZIPファイルをそれぞれのフォルダーに抽出することです。
抽出されたファイルは、それぞれのZIPファイルと同じフォルダーにある必要があります。したがって、「」に含まれるファイルは「File 1.zip
」などに必要ですFolder 1
。
FOR...DO
のコマンドについて読みましたWindows XP Professional Product Documentation - Using Batch Files
。
これが私のスクリプトです:
@ECHO OFF
FOR /D %folder IN (%%rootFolderCmdLnParam) DO
FOR %zippedFile IN (*.zip) DO 7za.exe e %zippedFile
ファイル抽出のために7za.exee%zippedFileを呼び出す前に、実際のディレクトリも変更する必要があると思いますが、このバッチファイルでその方法を理解することはできません(コマンドラインでの方法を知っていても、知っていても)同じ命令「cd」です)。
編集#1
ServerFault
私はすでに同じ質問に対するいくつかのヒントを受け取りました。このリンクで回答を参照してください。
ただし、パラメータフォルダで指定されたものからではなく、ルート(C:)から抽出されました。
誰かアイデアがありますか?
編集#2
バッチスクリプトは、スペース文字を含むフォルダ名とファイル名を適切に処理していないようです。誰かが私の考えを確認できますか?
編集#3
これが使用されるディレクトリ構造がわからないため、完全に再帰的である必要があります。
編集#4.a
@aphoriaのソリューションで、私はもうすぐそこにいます!唯一の問題は、たとえば
File5.zip
、取得するためだけにファイル名を取得し、サブフォルダーをFile5
作成してサブフォルダーFile5
に抽出するFile5.zip
必要があることですFile5
。次に、でFile5
サブフォルダーを作成Folder 1
する必要があります。代わりに、サブフォルダーを作成する必要がありFile1
ます。私の例に固執します。 。
編集#4.b
必要に応じて、現在のコードは次のとおりです。
@echo off
setlocal enableextensions enabledelayedexpansion
rem
rem Display instructions when no parameter is given.
rem
if "%1" equ "" (
echo Syntaxe : od.bat ^<directory mask>^
echo Exemple : od.bat *
goto :Eof
)
rem
rem Setting the PATH environment variable for this batch file for accessing 7za.exe.
rem
path=c:\temp;%PATH%
rem
rem Removing quotes from the given command line parameter path.
rem
set root=%1
set root=%root:~%1
set root=%root:~0,-1%
rem Searching directory structure from root for subfolders and zipfiles, then extracting the zipfiles into a subfolder of the same name as the zipfile.
for /F "delims==" %%d in ('dir /ogne /ad /b /s %root%') do (
echo Traitement du dossier : "%%d"
for /F "delims==" %%f in ('dir /b "%%d\*.zip"') do (
rem Getting filename without extension.
set subfolder=~n%f
mkdir "%%d\%subfolder%"
rem Extracting zipfile content to the newly created folder.
7za.exe e "%%d\%%f" -o"%%d\%subfolder%"
)
)
:Eof
endlocal
アイデアは誰ですか?
私の推測では、一度に1つのディレクトリ階層を掘り下げます。これが取引です。Folder A
in Folder 1
(Folder 1 \ Folder A)があるとすると、それはから検索しFolder 1
、Folder 5
に戻りFolder 1\Folder A
ます。ここで、%subfolder%変数は最後の値を保持します。
皆様のご協力に感謝申し上げます。