|
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 /? をご覧下さい。 |