1. ホーム
  2. スクリプト・コラム
  3. DOS/BAT(ドス・バット

BATの現在の作業パスを変更するWindowsバッチプロセス

2022-01-01 04:58:27

フォルダ内の全ファイルの情報を取得し、カレントディレクトリのtest.txtに保存するcmdコマンドです。

dir /s /b *. * > test.txt

test.batファイルとして保存し、test.batをダブルクリックすると、そのフォルダディレクトリにtest.txtが生成され、すべてのファイルのパス情報が含まれるようになります。
プログラムのタスクスケジューラを開き、新しい基本タスクを作成し、作成手順をインストールし、スタートアッププログラムをtest.batに設定します。
タスクを右クリックして実行し、正常に実行されるかどうかを確認する test.bat
ここで問題が発生します。スケジュールされたタスクが終了したと表示されますが、先ほどのフォルダーのパスにtest.txtというファイルが生成されていないことがわかります。
その後、test.txtのパス情報を絶対パスに変更してから、再度スケジュールタスクを実行してみてください

dir /s /b *. * > D:\testtest.txt

まだ問題があって、test.txtは生成されるのですが、その中のファイル情報がカレントフォルダではなく、例えばwindowssystem32の配下にあるのです。C:\WINDOWS0409, etc.
問題はカレントワーキングパスにあり、システムがタスクを計画しているときのデフォルトのカレントワーキングパスは C:\WINDOWS32 なので、ファイル情報の下に C:\WINDOWS32 と表示されるのですが...。
現在の作業パスを変更する:batファイルに行を追加し、最初にbatがあるディレクトリを現在の作業パスに設定します。

cd /d %~dp0
dir /s /b *. * > test.txt 

これで問題は完璧に解決し、スケジュールされたタスクが完璧に実行され、現在のフォルダー内のすべてのファイルが取得されます。

バッチファイルを使用して、現在の作業ディレクトリを変更する方法

バッチファイルの書き方について教えてほしいのですが。私は以下のように変数rootに格納されているパスを持っています。

set root=D:\WorkRoot

そして、次のように作業ディレクトリをこのルートに変更しています。

cd %root%

Dドライブの任意の場所からこのバッチファイルを実行すると、正常に実行されます。

ルート変数からドライブレターを取得する方法はありますか?カレントディレクトリをこのドライブに変更してから、cd %root%すればうまくいくはずです。