- ベストアンサー
windowNTの環境変数について
お世話になります。 WindowsNT4.0サーバーにてDOSバッチで処理日のフォルダを作成したいのですが、win2k以上ではdateが環境変数で当日の日付が設定されているのにwinNTではdateが登録されていないことは確認済みで、winNTではDOSBバッチ処理で日付を取得することは不可能なのでしょうか?date /tで日付を表示することは出来るのですが。 NTという古いOSで申し訳ありませんが、ご存知の方ご教示願います。 バッチ処理は毎日1回実行して、日々のフォルダを作成する感じにしたいです。 なお、環境はwindowsNTサーバー4.0SP6 以上、よろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
No.2 です。 先ほど回答したサンプルの1行目の記述で%が1つ抜けていたので訂正します。 for /F "tokens=1" %%d in ('date /t') do set dt=%%d set folder=%dt:/=% echo %folder% >これは、date /tを読み込んで頭から変数に格納するような感じでしょうか。 >date /tは変数でないし、'date /t'としてしまうと、文字列になってしまうような気がするのですが。 for /F ..... in ('コマンド') do ...... でコマンドの実行結果の出力を取り込むことができます。 for /? のNTでの出力の抜粋を以下に転記しておきます。 --------------------------------------------------------------- 最後に、FOR /F コマンドを使って、コマンド出力を解析することもできます。 それには、カッコで囲んだファイル名セットを一重引用符で囲みます。この文字列は コマンド ラインとして子 CMD.EXE に渡され、その出力が、ファイルと同じ ようにメモリにキャプチャされ、解析されます。 例: FOR /F "delims==" %i IN ('set') DO @echo %i この例は、現在の環境内の環境変数名を列挙します。
その他の回答 (3)
- Apr2nd
- ベストアンサー率69% (36/52)
#1です。私の回答につけてありましたコメントについては#3さんがコメントをつけて 頂いているので割愛するとし、#2さんの回答に対するコメントで >ご提示のまま実行したところ、 >d >とだけ表示しました。 とありましたが、これは#2さんが#3で訂正した前のコードを実行していませんか? また >プロンプトで1行ずつ実行すると、for分の行で「%%dの使い方が間違ってます」とエラーメッセージ表示します。 とありますが、変数で%を2つ重ねて記述するのはバッチファイルで利用する場合の記述なので プロンプトで実行すると文法エラーになります。 P.S.私の奴も確かNTのバッチで動かしてやつなんですけどねぇ…(^^;
お礼
#1さんのは、 for /F "tokens=1-3 delims=/ " %%i in ('date /t') do SET DT=%%i%%j%%k echo %DT% とやっていたのでダメみたいでした。 for /F "tokens=1-3 delims=/ " %%i in ('date /t') do SET DT=%%i%%j%%k set folder=%dt:/=% echo %folder% とすると同じように日付取得出来ました! >set folder=%dt:/=% は YYYY/MM/DD → YYYYMMDD に書式変更するための記述ということですが、これをしないと表示も出来ないんでしょうか? やっぱりまだ分かってないので調べます。 とにかく、#1さんのも取得できました。(足りないのは私の理解度?DOSバッチって分かりにくいですよね・・・) 有難うございました。
- pita-gora
- ベストアンサー率70% (102/145)
次のように for /F を使えば、NT4/2000/XP/2003 で共通に使えます。 for /F "tokens=1" %%d in ('date /t') do set dt=%d set folder=%dt:/=% echo %folder% 環境変数 dt に %date% と同様にYYYY/MM/DD の日付が入ります。 2行目の set folder=%dt:/=% は YYYY/MM/DD → YYYYMMDD に 書式変更するための記述です。 (フォルダ名に使用可能とするため"/"を取り除いています)
お礼
ご提示のまま実行したところ、 d とだけ表示しました。 プロンプトで1行ずつ実行すると、for分の行で「%%dの使い方が間違ってます」とエラーメッセージ表示します。 何かサーバー自体に設定必要なんでしょうか。
- Apr2nd
- ベストアンサー率69% (36/52)
現在NT環境がないので確認はできないのですが、以下のような方法で バッチ内で日付の取得が出来たと思いましたよ(変数DTに設定) for /F "tokens=1-3 delims=/ " %%i in ('date /t') do SET DT=%%i%%j%%k
お礼
試してみましたがエラーが出るようです。 これは、date /tを読み込んで頭から変数に格納するような感じでしょうか。 date /tは変数でないし、'date /t'としてしまうと、文字列になってしまうような気がするのですが。 一応、ありがとうございました。 他に方法無いですかね・・・。 NTでは無理!という場合もその旨教えて戴ければと思います。
お礼
出来ました!! プロンプトで実行するのとバッチ処理でと違う結果になるようですね。 そういうことを以前聞いたことあります。 DOSバッチは普段作ることないので、FORでコマンド出力をキャプチャ出来るなんて知りませんでした。 とても助かりました♪ 有難うございました!!