2つの必須引数を受け入れるバッチファイルbatch.bat
を作成します。
%1
は、現在のディレクトリからの相対パスを表します。%2
は、フィラネームを表します。現在のディレクトリがfather\me\
であると想定します。
ユーザーはこのバッチを次のように使用できます。
batch child/grandchild log
batch ../brother log
batch.bat
の業務内容は以下の通りです。
%1
ディレクトリに移動します*.tex
ディレクトリ内のすべての%1
ファイルを反復処理します。以下は不完全なコードです:
rem batch.bat takes 2 arguments.
cd %1
dir /b *.tex > <original directory>\%2.txt
DOSバッチで変更ディレクトリを呼び出した後、元のディレクトリに戻る方法は?
元のディレクトリに戻る場合は、PUSHD
で最初の変更を行い、POPD
で戻ります。つまり、%1ディレクトリへの移動は、
PUSHD %1
cD%1の代わりに、リターンは
POPD
cDの代わりに?
変更後に元のディレクトリにアクセスする場合は、次の方法で変数に保存します。
SET ORIGINAL=%CD%
後で%ORIGINAL%を使用します。次に例を示します。
dir /b *.tex > %original%\%2.txt
間違いなくPUSHD/POPDはこれを行うための好ましい方法です。しかし、SETLOCAL/ENDLOCALの(文書化されていない?)機能があり、(他のSETLOCALが行うことに加えて)同じことを実行します。
SETLOCALの後でディレクトリを変更した場合、ENDLOCALで元のディレクトリに戻ります。
cd OriginalLocation
setlocal
cd NewLocation
endlocal
rem we are back to OriginalLocation
isが文書化されているSETLOCALの他の1つ-呼び出されたバッチまたは:labelルーチン内のSETLOCALは、バッチまたはルーチンの終了時に暗黙のENDLOCALで終了します。暗黙的なENDLOCALは、明示的なENDLOCALと同じように元のフォルダーに戻ります。
cd OriginalLocation
call :ChangeLocation
rem - We are back to OriginalLocation because :ChangeLocation did CD after a SETLOCAL
rem - and there is an implicit ENDLOCAL upon return
exit /b
:ChangeLocation
setlocal
cd NewLocation
exit /b
PUSHD/POPDの代わりにSETLOCAL/ENDLOCALを使用することはお勧めしません。しかし、それはあなたが知っておくべき行動です。
ジョニーのコメントへの返信
PUSHD/POPDとSETLOCAL/ENDLOCALを組み合わせると混乱する可能性があります。 ENDLOCALはnotを実行して、次のようにPUSHDスタックをクリアします。
setlocal
cd test
@cd
pushd new
@cd
endlocal
@cd
popd
@cd
- 出力 -
D:\test>setlocal
D:\test>cd test
D:\test\test
D:\test\test>pushd new
D:\test\test\new
D:\test\test\new>endlocal
D:\test
D:\test>popd
D:\test\test
set ORIGINAL_DIR=%CD%
REM #YOUR BATCH LOGIC HERE
chdir /d %ORIGINAL_DIR%
ディレクトリを変更する前に、常に%cd%を変数に設定できます。
set current="%cd%"
cd "C:\Some\Other\Folder"
cd "%current%"
ほとんどの場合、ディレクトリを使用して変数を作成することは、バッチスクリプトで使用されます。スクリプトが長すぎる場合は、重要なパス、ファイル、サブルーチン、長いコマンドを含む変数をスクリプトの最初に定義します。
@ECHO OFF
REM Variables
::Programs
SET save_attachments=C:\Program Files\APED\Program\save_attachments.vbs
SET sendemail=C:\Program Files\APED\Program\sendkeys.vbs
SET tb=C:\Program Files\Mozilla Thunderbird\thunderbird.exe
SET fox=C:\Program Files\Foxit Software\Foxit Reader\Foxit Reader.exe
SET spool=C:\WINDOWS\system32\PRNJOBS.vbs
::Directories
SET new=C:\Program Files\APED\New
SET printing=C:\Program Files\APED\Printing
SET finish=C:\Program Files\APED\Finish
SET messages=C:\Program Files\APED\Script_Messages
SET nonpdf=C:\Program Files\APED\NonPDFfiles
SET errorfiles=C:\Program Files\APED\Error Files
::Important Files
SET printlog=C:\Program Files\APED\Script_Messages\PrintLOG.txt
SET printemail=C:\Program Files\APED\Script_Messages\EmailPrintLOG.txt
SET errorlog=C:\Program Files\APED\Script_Messages\ErrorLOG.txt
SET erroremail=C:\Program Files\APED\Script_Messages\EmailErrorLOG.txt
SET movefiles=C:\Program Files\APED\Script_Messages\MoveFiles.txt
ただし、PUSHDとPOPDは、短くて甘いimoであれば、優れたソリューションです。