web-dev-qa-db-ja.com

Windowsコマンドライン:名前に現在の日付を含むファイルを作成する

バッチスクリプトからZipファイルを作成しようとしています。 archive_.Zipのような名前にする必要があります

残念ながら、これはスラッシュのために日付がy/m/dのような形式のシステムでは機能しません。

Zip some_options "archive_%DATE%.Zip"

%DATE%変数は次のように展開されます

Mon 09/28/2009

私はgnuwin32パッケージにアクセスできるので、たとえばsedを使用して、スペースとスラッシュをダッシュ​​に置き換えることができます。問題は、sedの出力を使用してZipアーカイブのファイル名を作成するにはどうすればよいですか?

Unix(bash)では、バッククォートを使用してコマンドを評価し、その出力を別のコマンドで使用できます。

Zip [...] archive_`echo %DATE% | sed -e s/.../.../`.Zip

Windowsで利用できる同様のものはありますか?

または、変数をsedの戻り値に設定し、それを使用してファイル名を作成する方法があるでしょうか。

19

変数内のシンボルは、次を使用して置き換えることができます。

set _date=%DATE:/=-%
27
Christopher

私は常に使用します:

For /f "tokens=1,2,3,4,5 delims=/. " %%a in ('date/T') do set CDate=%%a%%b%%c%%d

その後、CDateはSat02182012になります。より並べ替えやすくしたい場合は、CDateを%% d-%% b-%% cに設定して、2012-02-18にします。

For /f "tokens=1,2 delims=:" %%f in ('time /t') do set CTime=%%f%%g

日付と時刻のフォルダー/ファイルを使いやすくするため。

5
släcker

私は非常によく似た質問への回答を投稿しました ここ 。フィールドの日付の分割は、harrymcの回答の複数行ではなく、1行で行われます。

興味深い部分は次のとおりです。

@echo off
for /F "tokens=2-4 delims=/ " %%i in ('date /t') do set yyyymmdd=%%k%%j%%i
echo Date: %yyyymmdd%

そして警告はまだ関連しています:

警告:日付の形式(yyyymmdd = %% k %% j %% i)は、地域の設定によって異なります。フランスの日付形式(dd/mm/yyyy)を使用しているため、形式として「%% k %% j %% i」を使用する必要があります(%% i =日、%% j =月、%% j =年)。

地域設定が米国スタイル(mm/dd/yyyy)に設定されている場合は、「%% k %% i %% j」を使用する必要があります(%% i =月、%% j =日、%% j =年) 。

4
Snark
Zip some_options "archive_%date:/=-%.Zip"

/=-/マイナス記号付き。

3
Theo

このかなり恐ろしいコードは、あなたが望むようなことをするはずです

move "Filename.txt" "Filename%date:~6,4%%date:~3,2%%date:~0,2%_%Time:~0,2%%Time:~3,2%%Time:~6,2%.txt"

ファイル名を適切に変更した場合。

2
Col

あなたの質問はWindowsとしてタグ付けされているので、古き良き.batファイルで機能するこの解決策を見つけました:
"MMDDYYYY形式で現在の日付を取得するためのWindowsバッチファイル(.bat)"
そしておそらくあなたのケースに適応させることができます:

反響する
@ REM Seamonkeyのクイック日付バッチ(MMDDYYYY形式)
@ REMセットアップ%date変数
@ REM最初に月、日、年をmm、dd、yyyy形式に解析し、次に結合してMMDDYYYYにします

/ Fの場合「TOKENS = 1 * DELIMS =」%% A IN( 'DATE/T')CDATE = %% Bを設定してください
FOR/F“ TOKENS = 1,2 eol =/DELIMS = /” %% A IN( 'DATE/T')DO SET mm = %% B
FOR/F“ TOKENS = 1,2 DELIMS =/eol = /” %% A IN( ’echo%CDATE%’)DO SET dd = %% B
FOR/F“ TOKENS = 2,3 DELIMS = /” %% A IN( ’echo%CDATE%’)DO SET yyyy = %% Bv vSET date =%mm %% dd %% yyyy%

これは、%date変数をMMDDYYYY形式の今日の日付に設定するだけなので、後でスクリプトで呼び出すことができます。

編集
より良い構文が見つかりました。私の日付が今日の "2009年9月28日月曜日"であるとすると、
設定日=%日付:〜0,2%
月を設定=%日付:〜7,2%
年を設定=%日付:〜10,4%

2
harrymc

純粋なcmd.exeバージョンとgnuwin32-'date 'の組み合わせ:

%> for /F "usebackq" %d in ( `date.exe +"%y%m%d"` ) do Zip archive_%d.Zip <folder>
2
akira

/ f "tokens = 1,2,3,4,5 delims = /。"の場合、(%% a in( 'date/T')do set CDate = %% d-%% b-%% c

@エコーデータ=%CDate%

これは、現在最も一般的な年月日です

1
Buffme

みんなの意見をまとめると、自分に合ったものが得られると思います。これはWindows 2003システム上にあり、パフォーマンスモニターからのトリガーに応答して実行中のプロセスのスナップショットを提供します。

@echo off
For /f "tokens=1,2,3,4,5 delims=/. " %%i in ('date /t') do set CDate=%%k%%j%%i
For /f "tokens=1,2 delims=:" %%f in ('time /t') do set CTime=%%f%%g
tasklist /fo table >tasklist%CDate%%CTime%.txt

出力ファイルは、区切り文字のない1つのストリングで名前が付けられます。

1
Anton Liebscher

cscript + vbasicの使用について:

WScript.Shell.run "Zip archive_" & DatePart("yyyy", Now) & "_" & DatePart("m", Now) & "_" & DatePart("d", Now) & ".Zip " & WScript.arguments(0)

経由で呼び出す

cscript /nologo Zip_it.vbs
1
akira

%DATE%またはdate /tの出力のいずれかを使用するソリューションは、ユーザーが地域設定を変更した場合に破損する可能性があります。たとえば、「短い日付」形式を"yyyy-MM-dd"に設定したので、%DATE%"2012-02-18"と等しくなり、date /tは同じ出力を生成します。 (これはWindows 7の場合です。以前のバージョンのWindowsでも同じだと思います。)

バッチファイルをビルドして実行します。

GNU dateコマンドを使用できるので、次のようなことができます:

C:\path\to\gnu\date "+Zip some_options archive_%Y-%m-%d.Zip" > tmp.bat
call .\tmp.bat

tmp.batには次のようなものが含まれます:

Zip some_options archive_2012-02-18.Zip

これは現在のディレクトリにtmp.batを作成することに注意してください。これは問題になる可能性があります。 %TEMP%\tmp.batを作成した方がよい場合があります。また、後でファイルを削除しませんでした。それはとても簡単です。

date +FORMATを使用すると、date形式の文字列と同様に、printfコマンドの出力形式を指定できます。詳細は coreutils日付ドキュメント を参照してください。形式には任意のテキストを含めることができるため、この場合はsedを使用する必要さえありません。

1
Keith Thompson
Zip [...] archive_`echo %DATE% | tr / -`.Zip

うまくいくはずです。

一方、おそらくdateコマンドが利用可能です(Windowsは知りません)。はいの場合は、次のようにします。

Zip [...] archive_`date +'%Y-%m-%d'`.Zip
0
user7385