[前の記事]« コマンドライン上からhtmlファイルを印刷したい
[次の記事]WIN98:バッチファイルでWindowsを終了させたい »

関連オンラインソフト配布サイト:
Vector>ダウンロード(top) |>MS-DOSまたは汎用 | >WindowsVista/XP/2000/NT

▲カテゴリー「DATE,TIME…日付、時刻の取得/利用」索引へ

Win2000:ファイル名に現在の日付・時刻を付加するには?


486) バッチ内での文字列操作? ao 2003/07/31(木) 20:21


はじめて利用させて頂きます、aoと申します。
質問なのですが、DOSのバッチで引数として受け取ったファイル名に
システム時刻をYYYYMMDDhhmmss形式で付加させたいのですが、やり方
がさっぱり分かりません。
例えば aaa.csv というファイルを引数に受け取ったとすると、
aaa_YYYYMMDDhhmmss.csv
といった感じにリネームしたいのです。
(YYYYMMDDhhmmssは現在のシステム時刻)

DOSのDATE、TIMEコマンドを調べていると YYYY/MM/DD、hh:mm 形式で
取得しているようなので / や : を除外したいです。
あとTIMEコマンドは秒まで取得する事は可能なのでしょうか?
無理なのであれば、バッチの呼び元から YYYY/MM/DD、 hh:mm:ss の
形式で渡す事は可能です。

是非ご教授お願い致します。

488) Re:バッチ内での文字列操作? ふぇむ 2003/08/01(金) 06:45


>質問なのですが、DOSのバッチで引数として受け取ったファイル名に
>システム時刻をYYYYMMDDhhmmss形式で付加させたいのですが、やり方
>がさっぱり分かりません。

OSは何でしょうか?
WindowsNT系の流れを汲むOSなら、DOSコマンドの範疇だけでも解決できますが、Windows95/98/ME系では、DOSコマンドだけではなかなか実現困難で、他のツールの助力を得る必要があります。
前にも何度かこの話は出ているので、この会議室の発言をさかのぼってもると、答えが書いてあると思います。


>DOSのDATE、TIMEコマンドを調べていると YYYY/MM/DD、hh:mm 形式で
>取得しているようなので / や : を除外したいです。

Windows2000/XPだと、そのような文字列の置換は、set /? で set コマンドのヘルプを参照すると、やり方が書いてあります。DATEコマンドやTIMEコマンドの値を変数にセットするには、システムで用意している %date% や %time% 変数を使うと最初から変数として扱えますし、for 文(for /? 参照)を使って set してもよいです。


>あとTIMEコマンドは秒まで取得する事は可能なのでしょうか?

Windows2000やXPなどでは、Timeコマンド系でミリ秒までとれますよ。


>例えば aaa.csv というファイルを引数に受け取ったとすると、
>aaa_YYYYMMDDhhmmss.csv
>といった感じにリネームしたいのです。

私は、WinNT4.0以降、バッチ処理のログファイルのファイル名とか、ログファイルの中の各ログのタイムスタンプとか、にDOSコマンドだけで取得した年月日・時分秒文字列を使用しています。



490) Re2:バッチ内での文字列操作? ao 2003/08/01(金) 11:41


こんにちは、回答ありがとうございました。
使用しているOSは2000Serverです。
おっしゃられるよう過去ログをたどっていくと日付、時刻の取得は、
set NowDate=%date:~2,4%%date:~7,2%%date:~-2%
set NowTime=%time:~0,2%%time:~3,2%%time:~6,2%
で解決できました。

ただ、これらの情報をファイル名に付加する際に、
[①任意の長さのファイル名].[②任意の長さの拡張子]
の . の直前に付加したいのですが、①と②の取得方法が分かりません
でした。
②の拡張子は最悪 .csv の決めうちでも構わないのですが、①の部分
は固定にはできません。
何か良い方法は無いでしょうか?

491) Re3:バッチ内での文字列操作? じゃく 2003/08/01(金) 13:31


>ただ、これらの情報をファイル名に付加する際に、
>[①任意の長さのファイル名].[②任意の長さの拡張子]
>の . の直前に付加したいのですが、①と②の取得方法が分かりません
>でした。
>②の拡張子は最悪 .csv の決めうちでも構わないのですが、①の部分
>は固定にはできません。
>何か良い方法は無いでしょうか?
for 文の変数参照の置換機能でできます。
例えばバッチの引数 %1 にファイル名が指定されているとして
for %%F in ( %1 ) do echo ファイル名 - %%~nF
for %%F in ( %1 ) do echo 拡張子 - %%~xF
という風にそれぞれ取り出せます。
今回の場合なら、
for %%F in ( %1 ) do set fname=%%~nF%NowDate%%NowTime%%%~xF
とすると、fnameにファイル名が入ります。

詳しくは for /? をご覧下さい。
 
 


カテゴリー「DATE,TIME…日付、時刻の取得/利用」索引へ

 

カテゴリー一覧

FPCU/FPCDIY QUICK LINK online
この上の各ジャンル名をクリックすると、下のウィンドウが切り替わります▼


=リンク集のインデックスはこちら=

資料書籍

About

2003年07月31日 02:12に投稿されたエントリーのページです。

ひとつ前の投稿は「コマンドライン上からhtmlファイルを印刷したい」です。

次の投稿は「WIN98:バッチファイルでWindowsを終了させたい」です。

他にも多くのエントリーがあります。メインページアーカイブページも見てください。

This site is powered by Six Apart
Movable Type 3.33-ja
このブログについて | 運営:有限会社メディアポート