2016-08-09 3 views
0

は私がネットワークディレクトリ内のsettings.xmlと呼ばれる特定のファイルの最終更新日時をファイルを抽出し、ローカルログへの書き込みを行うようにしたいバッチファイルでPOPD後にそれを使用する方法ファイル。 以下は私が試したものです。のpushd後に一時的なドライブの情報を抽出するが、

PUSHD "%share%" 
forfiles /s /m settings.xml /c "cmd /c SET [email protected] SET [email protected]" 
forfiles /s /m settings.xml /c "cmd /c SET [email protected] SET [email protected]" 
POPD 
ECHO %fileDate% %fileTime% >> "LOGFILE.TXT" 

%share%はネットワーク上の場所で、LOGFILE.TXTはバッチスクリプトが実行されているローカルマシン上にあります。ただし、これはEchoがオフのログのみです。ログファイルに保存します。

私は次のことを試してみましたが、それは私が欲しいものではありませんネットワークドライブ自体の情報を、書きました。

PUSHD "%share%" 
forfiles /s /m settings.xml /c "cmd /c ECHO @fDate @ftime >> LOGFILE.TXT" 
POPD 

ネットワークの場所から日時を抽出するにはどうすればよいですか?ローカルファイルに書き込むにはどうすればよいですか?その情報を変数に格納し、後でその変数を使用する必要がありますが、その方法はわかりません。私は初めてバッチスクリプトを手に入れようとしています。

更新1コメントに基づいて試してみます。まだ時間を印刷していない。

SET current=%CD% 
PUSHD "%share%" 
forfiles /s /m settings.xml /c "cmd /c ECHO @ftime >> "%current%\LOGFILE.TXT"" 
POPD 
+1

。 'cmd/c'インスタンスの一部としてログファイルに日付と時刻をエコーする必要があります。コマンド修飾子で 'FOR/R'コマンドだけを使用している理由がありますか? – Squashman

+1

は、あなたの 'PUSHD'コマンドの前に、変数にカレントディレクトリを設定し、使用したいログファイルのリダイレクトを持つこと。 '現在=%のCD%を'と '>>「%現行%の\のlogfile.txtという」設定' – Squashman

+2

はなぜだけではなく、テキストファイルへのフルパスを使うのか? – SomethingDark

答えて

3

これはずっと速いので、私はFOR/Rを使って解決策を提供するつもりです。唯一注意しなければならないのは、日付の時刻修正が時刻に秒を表示しないことです。サイドノートでは

FOR /R "%share%" %%G IN (settings.xml) DO echo %%~tG >>logfile.txt 

、ちょうど他の例でFORFILESを使用すると、同様に動作することを証明したかったです。各ファイルが処理された後、あなたがFORFILESで `CMD/C 'を使用して設定するすべての変数が破棄され

@echo off 
set share=H:\ 
SET current=%CD% 
PUSHD "%share%" 
forfiles /s /m temp.txt /c "cmd /c ECHO @ftime >>"%current%\LOGFILE.TXT"" 
POPD 
type logfile.txt 

一時停止

出力

C:\Users\Squashman\Desktop>so.bat 

1:31:04 PM 
9:23:58 AM 
12:42:34 PM 
Press any key to continue . . . 
+0

ありがとうSquashman!それは動作します。 PushDとPopDよりずっと簡単です。 %% Gと%%〜tGは何ですか?それは本当に私を助けるだろう。 –

+0

%% GはFOR変数です。ちょうどあらゆる言語でFORを使用するのと同じです。実行を保存するには変数が必要です。 %%〜tGはファイルの時刻を教えてくれる修飾子です。このことについては、コマンドのヘルプを読むことですべて読むことができます。 cmdプロンプトを開き、次のように入力します。 'for /?' – Squashman

関連する問題