[前の記事]« 処理をn回実行する方法
[次の記事]NT系:複数のSQLを実行するには »

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

▲カテゴリー「SET, PATH, %環境変数%」索引へ

一意の(重複しない)変数の動的な生成・取得方法

593) 動的な変数の取得 ぽち 2003/09/09(火) 10:40


DOSバッチにて次のようなことをしたいです。
1.毎日特定時間にバッチが走る
2.あるファイルを別ファイル名にリネームする

1.は可能だということはわかっています。
2.についてはリネームするところまではわかります。

しかし毎日走らせると、リネーム後のファイル名を一意
にする必要がでてきます。

そこで、現在の日付やら何やらでファイル名を付与しよう
かと思っているのですが、動的な変数の取得を音字列として
バッチ内に操作するにはどのようにすれば良いのでしょうか?

また、日付などでなくもっと簡単に一意性を確保できるので
あればそちらも考えていきたいと思っています。

よろしくお願い致します。

596) Re:動的な変数の取得 じゃく 2003/09/09(火) 11:06

http://homepage1.nifty.com/jak/batch/date.html

>そこで、現在の日付やら何やらでファイル名を付与しよう
>かと思っているのですが、動的な変数の取得を音字列として
>バッチ内に操作するにはどのようにすれば良いのでしょうか?

現在(バッチ実行時)の日付を求める方法は過去ログにも多数ありますが、

(1)環境変数 date を使う方法
set fname=%DATE:/=%
echo SAMPLE > %fname%.txt

(2) date コマンドを使う方法
for /f "tokens=1-3 delims=/" %%a in ('date /t') do set fname=%%a%%b%%c
echo SAMPLE > %fname%.txt

以上のサンプルで日付のファイル名の作成方法はおわかりになりますか?
ちなみに、Windows 2000/XP系での動作です。(OS不明のため)
95/98系ですとちょっと工夫が必要です。(不可能ではない)

600) Re:動的な変数の取得 YanaKen 2003/09/09(火) 14:26


ぽちさん

>また、日付などでなくもっと簡単に一意性を確保できるので
>あればそちらも考えていきたいと思っています。

 実用上「一意であればよい」ということでしたら、(これまたWindows2000/XP前提ですが)超簡易な方法としては↓を使うテも考えられますね。

>%RANDOM% - 0 から 32767 の間の任意の 10 進数に展開します

:REPEAT
 SET FILENAME=%RAMDOM%.TXT
 IF EXIST %FILENAME% GOTO REPEAT

※ただし、フォルダ内の既存ファイル数が多ければ多いほど新しい名前の生成に時間がかかることになるし、0.TXTから32767.TXTまでがすべてフォルダ内に揃ってしまうと無限ループにはまりますが(^^;。

YanaKen



605) Re:動的な変数の取得 Hellcat 2003/09/09(火) 21:02


>また、日付などでなくもっと簡単に一意性を確保できるので
>あればそちらも考えていきたい

一意な名称を取得する方法として次のような手法もあります。
フリーソフトのBATUTY(BU)を使います。

【使い方】
例えばC:\TAK\WORKディレクトリー上で新たなファイルを作成するため、一意な任意のファイル名称を取得したい場合は
 BU TEMPNAME C:\TAK\WORK
とします。

私の手許の環境で実行したところ、結果は以下のような結果が標準出力に出力されました。
C:\TAK\WORK\BECJCFDK

さらにもう一度実行したところ、結果は以下のようでした。
C:\TAK\WORK\BECOCIEC

ということで、当該ディレクトリー上に存在しないファイル名称を取得できます。
これはテンポラリーファイルを作成する場合に用いるものですが、お尋ねの趣旨に合うものと思われますので紹介します。

カレントディレクトリー上で一意な名称を取得したい場合は
 BU TEMPNAME
とします。
私の手許の環境では \BEDCAAAP と出力されました。

この出力結果を環境変数(UNIQ)に代入したい場合は
WinXPなどの場合
 FOR /F "usebackq delims==" %i IN (`BU TEMPNAME C:\TAK\WORK`) DO SET UNIQ=%i
(FORコマンドはちょっと自信がありませんが、取りあえず私の環境では動きました)

Win9x, Meなどの場合
 BU -nUNIQ TEMPNAME C:\TAK\WORK

とします。

【所在】
BATUTY(BU)は、以下にあります。
http://www.vector.co.jp/soft/dos/util/se023753.html
this article refers Vector Soft Library..
 
 


カテゴリー「SET, PATH, %環境変数%」索引へ

 

カテゴリー一覧

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


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

資料書籍

About

2003年09月09日 09:47に投稿されたエントリーのページです。

ひとつ前の投稿は「処理をn回実行する方法」です。

次の投稿は「NT系:複数のSQLを実行するには」です。

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

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