次のコマンドを使用してファイルの日付を取得しています。ただし、別のサーバー(Windows Server 2003)に移動して以来、fileDate
変数は空白の値を返してきました。
FOR /f %%a in ('dir myfile.txt^|find /i " myfile.txt"') DO SET fileDate=%%a
ファイルの日付を取得する他のより信頼できる方法はありますか?
変化する %
から%%
バッチファイルで使用する場合、%~ta
構文入力call /?
for %a in (MyFile.txt) do set FileDate=%~ta
できます
forfiles /M myfile.txt /C "cmd /c echo @fdate @ftime"
バッチファイルを使用してファイルプロパティを取得するための便利なリファレンスには、最終変更時刻が含まれます。
FOR %%? IN ("C:\somefile\path\file.txt") DO (
ECHO File Name Only : %%~n?
ECHO File Extension : %%~x?
ECHO Name in 8.3 notation : %%~sn?
ECHO File Attributes : %%~a?
ECHO Located on Drive : %%~d?
ECHO File Size : %%~z?
ECHO Last-Modified Date : %%~t?
ECHO Drive and Path : %%~dp?
ECHO Drive : %%~d?
ECHO Fully Qualified Path : %%~f?
ECHO FQP in 8.3 notation : %%~sf?
ECHO Location in the PATH : %%~dp$PATH:?
)
Vistaで動作します。試してみたいこと:
find
をfindコマンドの完全修飾パスに置き換えます。 find
は一般的なツール名です。 Windowsの組み込み検索とは非常に異なるUNIXの検索があります。このような:FOR /f %%a in ('dir ^|%windir%\system32\find.exe /i "myfile.txt"') DO SET fileDate=%%a
cmd.exeウィンドウでコマンドの出力を調べます。そのためには、%%を%に置き換える必要があります。FOR /f %a in ('dir ^|c:\windows\system32\find.exe /i "myfile.txt"') DO SET fileDate=%a
それはあなたにいくつかのアイデアを与えるかもしれません。
空白として表示される場合は、コマンドプロンプトで再度、これを試してください。
dir | c:\windows\system32\find.exe /i "myfile.txt"
これにより、表示する必要があるものが表示されます。
それでもそれが分からない場合は、投稿を編集して、これらのコマンドで表示される内容を含めてください。誰かが助けてくれます。
vbscriptを使用してファイルの更新日を取得することもできます
Set objFS=CreateObject("Scripting.FileSystemObject")
Set objArgs = WScript.Arguments
strFile= objArgs(0)
WScript.Echo objFS.GetFile(strFile).DateLastModified
上記をmygetdate.vbsとしてコマンドラインに保存します
c:\test> cscript //nologo mygetdate.vbs myfile
どのような出力(exactly)は、現在のディレクトリでdir myfile.txt
が出力しますか?区切り文字を設定するとどうなりますか?
FOR /f "tokens=1,2* delims= " %%a in ('dir myfile.txt^|find /i " myfile.txt"') DO SET fileDate=%%a
(delims=
の後のスペースに注意してください)
(生活を楽にするために、コマンドラインから%%a
を%a
に置き換えることでこれを行うことができます)
ロケールに依存しない方法でファイルの最終変更日時を取得するには、 wmic
コマンドを使用できますDataFile
エイリアスを使用:
wmic DataFile where "Name='D:\\Path\\To\\myfile.txt'" get LastModified /VALUE
ファイルへの完全なパスを指定する必要があり、すべてのパス区切り文字(バックスラッシュ\
)をここで二重にする必要があることに注意してください。
これは、このような標準化された日付/時刻値を返します(つまり、12番目 2019年8月、13:00:00、UTC + 120 '):
LastModified=20190812130000.000000+120
日付/時刻値をキャプチャするには、 for /F
を使用します。その後、 set
を使用して変数に割り当てることができます。
for /F "delims=" %%I in ('
wmic DataFile where "Name='D:\\Path\\To\\myfile.txt'" get LastModified /VALUE
') do for /F "tokens=1* delims==" %%J in ("%%I") do set "DateTime=%%K"
2番目のfor /F
ループは、最初のfor /F
ループによるwmic
のUnicode出力のASCII/ANSIテキストへの変換によるアーティファクト(孤立した復帰文字など)を回避します(参照: この回答 )。
次に、 sub-string expansion を使用して、これから純粋な日付または時刻を抽出できます。
set "DateOnly=%DateTime:~0,8%"
set "TimeOnly=%DateTime:~8,6%"
作成日時または最終アクセス日時を取得するには、プロパティLastModified
をそれぞれCreationDate
またはLastAccessed
に置き換えます。ファイルではなくディレクトリに関する情報を取得するには、FSDir
の代わりにエイリアスDataFile
を使用します。
通常wmic
で受け入れられない,
と)
の両方を含むファイル(またはディレクトリ)パス/名前を指定するには、 この質問 を見てください。 。
また、 this post および this one をチェックして、ファイルおよびディレクトリの日付/時刻スタンプを取得する方法を確認してください。