[前の記事]« 定義ファイルを使った環境変数の一括設定
[次の記事]日付表示をMMDDHHMMYYYY形式にしたい »

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

▲カテゴリー「DEL,ERASE,REN…ファイル削除/復活/移動/名前の変更」索引へ
▲カテゴリー「遅延環境変数の展開」索引へ

ファイル名末尾の数字に1を足してリネーム

237.
ファイル名の数字を増やしてリネーム
2005年01月27日(木) 20時54分
yuuta
●DOS/Windowsのバージョン↓
今開発?に使っているのがwindows XP Professionalで
動かしたいのはwindows 2003 server です。
ログファイルを保存するんですが世代を設定し、その数のファイル
を別のフォルダに保存します。
その際、新規で保存するときに既存のバックアップファイル名の
末尾にある数字を順送りにしたいのです。
例:log.old3 → log.old4
    log.old4  → log.old5
一応自分で考えた結果

@echo off

rem 世代数
set bakgene=5

for /L %%a in (%bakgene%,-1,2) do (
set /a x67=%%a-1
ren C:\log\log.old%x67% log.old%%a
)

ren C:\log\log.old log.old1

こんな感じに作ってみたのですが、うまくいきません。

どなたか、ヒントだけでもいいのでよろしくお願いします。
238.
Re:ファイル名の数字を増やしてリネーム
2005年01月27日(木) 23時06分
otn
>@echo off

>rem 世代数
>set bakgene=5

>for /L %%a in (%bakgene%,-1,2) do (
>set /a x67=%%a-1
>ren C:\log\log.old%x67% log.old%%a
>)

>ren C:\log\log.old log.old1

>こんな感じに作ってみたのですが、うまくいきません。

>どなたか、ヒントだけでもいいのでよろしくお願いします。

じゃあ、ヒントだけ。
set /? の後半に、何故上手く行かないかと、解決策が書いてあります。
240.
Re2:ファイル名の数字を増やしてリネーム
2005年01月28日(金) 08時07分
yuuta
>>@echo off
>>
>>rem 世代数
>>set bakgene=5
>>
>>for /L %%a in (%bakgene%,-1,2) do (
>>set /a x67=%%a-1
>>ren C:\log\log.old%x67% log.old%%a
>>)
>>
>>ren C:\log\log.old log.old1
>>
>>こんな感じに作ってみたのですが、うまくいきません。
>>
>>どなたか、ヒントだけでもいいのでよろしくお願いします。

>じゃあ、ヒントだけ。
>set /? の後半に、何故上手く行かないかと、解決策が書いてあります。


レスありがとうございます。
set /? をテキストに出力して見たのですが・・・分かりません。
まことに勝手なのですが具体的に教えて頂ければありがたいです。
よろしく御願いします。
242.
Re3:ファイル名の数字を増やしてリネーム
2005年01月28日(金) 12時37分
YanaKen
yuutaさん こんにちは。

>>>for /L %%a in (%bakgene%,-1,2) do (
>>>set /a x67=%%a-1
>>>ren C:\log\log.old%x67% log.old%%a
>>>)

>set /? をテキストに出力して見たのですが・・・分かりません。
>まことに勝手なのですが具体的に教えて頂ければありがたいです。
>よろしく御願いします。

 ( )でくくった中の処理では、(デフォルトでは)実行前に変数が展開されてしまう(変数ではなくなっている)ため、setコマンドの結果は反映しません。
 だいぶ古いログですが、なるべく丁寧にこの問題を解説したものがありますので参照なさってください。

http://fpcu.on.coocan.jp/dosvcmd/bbs/log/cat3/set_path/cat51/1-0461.html

YanaKen
244.
Re4:ファイル名の数字を増やしてリネーム
2005年01月28日(金) 14時26分
yuuta
>yuutaさん こんにちは。

>>>>for /L %%a in (%bakgene%,-1,2) do (
>>>>set /a x67=%%a-1
>>>>ren C:\log\log.old%x67% log.old%%a
>>>>)

>>set /? をテキストに出力して見たのですが・・・分かりません。
>>まことに勝手なのですが具体的に教えて頂ければありがたいです。
>>よろしく御願いします。

> ( )でくくった中の処理では、(デフォルトでは)実行前に変数が展開されてしまう(変数ではなくなっている)ため、setコマンドの結果は反映しません。
> だいぶ古いログですが、なるべく丁寧にこの問題を解説したものがありますので参照なさってください。

http://fpcu.on.coocan.jp/dosvcmd/bbs/log/cat3/set_path/cat51/1-0461.html

>YanaKen


YanaKen さん レスありがとうございます。

本文・過去ログ見させていただきました。

使えないということで理解致しました。

そうなんですね・・・自分にはこの方法しか
思いつかなかったのでちょっとショックです。

重ね重ね申し訳ないのですが、このようなリネーム
処理を出来るほかの方法はどのようなものがあり
ますか?

よろしくお願いします。
245.
Re5:ファイル名の数字を増やしてリネーム
2005年01月28日(金) 16時32分
otn
>>yuutaさん こんにちは。
>>
>>>>>for /L %%a in (%bakgene%,-1,2) do (
>>>>>set /a x67=%%a-1
>>>>>ren C:\log\log.old%x67% log.old%%a
>>>>>)
>>
>>>set /? をテキストに出力して見たのですが・・・分かりません。
>>>まことに勝手なのですが具体的に教えて頂ければありがたいです。
>>>よろしく御願いします。
>>
>> ( )でくくった中の処理では、(デフォルトでは)実行前に変数が展開されてしまう(変数ではなくなっている)ため、setコマンドの結果は反映しません。
>> だいぶ古いログですが、なるべく丁寧にこの問題を解説したものがありますので参照なさってください。
>>
>>http://fpcu.on.coocan.jp/dosvcmd/bbs/log/cat3/set_path/cat51/1-0461.html
>>
>>YanaKen
>>

>YanaKen さん レスありがとうございます。

>本文・過去ログ見させていただきました。

>使えないということで理解致しました。

>そうなんですね・・・自分にはこの方法しか
>思いつかなかったのでちょっとショックです。

>重ね重ね申し訳ないのですが、このようなリネーム
>処理を出来るほかの方法はどのようなものがあり
>ますか?

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

set /? に、
>    set LIST=
>    for %i in (*) do set LIST=%LIST% %i
>    echo %LIST%
だとうまく行かないので、!による遅延展開を使って、
>    for %i in (*) do set LIST=!LIST! %i
と書けば良いと書いてあります。遅延展開を有効にするためには、setlocal enabledelayedexpansion と書きます。selocal/?を参照。
この場合だと、

@echo off
setlocal enabledelayedexpansion
set bakgene=5
for /L %%a in (%bakgene%,-1,2) do (
set /a x67=%%a-1
ren C:\log\log.old!x67! log.old%%a
)

別の方法としては、サブルーチンを使って文を分け、
@echo off
set bakgene=5
for /L %%a in (%bakgene%,-1,2) do call :rensub %%a
goto :eof
:rensub
set /a x67=%1-1
ren C:\log\log.old%x67% log.old%1
246.
Re6:ファイル名の数字を増やしてリネーム
2005年01月28日(金) 19時09分
yuuta
>>>yuutaさん こんにちは。
>>>
>>>>>>for /L %%a in (%bakgene%,-1,2) do (
>>>>>>set /a x67=%%a-1
>>>>>>ren C:\log\log.old%x67% log.old%%a
>>>>>>)
>>>
>>>>set /? をテキストに出力して見たのですが・・・分かりません。
>>>>まことに勝手なのですが具体的に教えて頂ければありがたいです。
>>>>よろしく御願いします。
>>>
>>> ( )でくくった中の処理では、(デフォルトでは)実行前に変数が展開されてしまう(変数ではなくなっている)ため、setコマンドの結果は反映しません。
>>> だいぶ古いログですが、なるべく丁寧にこの問題を解説したものがありますので参照なさってください。
>>>
>>>http://fpcu.on.coocan.jp/dosvcmd/bbs/log/cat3/set_path/cat51/1-0461.html
>>>
>>>YanaKen
>>>
>>
>>YanaKen さん レスありがとうございます。
>>
>>本文・過去ログ見させていただきました。
>>
>>使えないということで理解致しました。
>>
>>そうなんですね・・・自分にはこの方法しか
>>思いつかなかったのでちょっとショックです。
>>
>>重ね重ね申し訳ないのですが、このようなリネーム
>>処理を出来るほかの方法はどのようなものがあり
>>ますか?
>>
>>よろしくお願いします。

>set /? に、
>>    set LIST=
>>    for %i in (*) do set LIST=%LIST% %i
>>    echo %LIST%
>だとうまく行かないので、!による遅延展開を使って、
>>    for %i in (*) do set LIST=!LIST! %i
>と書けば良いと書いてあります。遅延展開を有効にするためには、setlocal enabledelayedexpansion と書きます。selocal/?を参照。
>この場合だと、

>@echo off
>setlocal enabledelayedexpansion
>set bakgene=5
>for /L %%a in (%bakgene%,-1,2) do (
>set /a x67=%%a-1
>ren C:\log\log.old!x67! log.old%%a
>)

>別の方法としては、サブルーチンを使って文を分け、
>@echo off
>set bakgene=5
>for /L %%a in (%bakgene%,-1,2) do call :rensub %%a
>goto :eof
>:rensub
>set /a x67=%1-1
>ren C:\log\log.old%x67% log.old%1


otnさん YanaKenさん ありがとうございました!!
動くようになりました。

こんな設定があったんですね。
setのhelpに書いてなかったので全く分かりませんでした。

でも今になって遅延環境変数で過去ログを検索すればありました。
もうちょっと自分で調べる努力があれば分かったかもしれません。

今回は安易に聞いてしまい申し訳ありませんでした。
247.
Re7:ファイル名の数字を増やしてリネーム
2005年01月28日(金) 19時57分
otn
>こんな設定があったんですね。
>setのhelpに書いてなかったので全く分かりませんでした。

たしかに。
set /? に遅延展開の説明はあるものの、setlocalで有効に出来るとは書いてない。でも、CMD の /V オプションで有効に出来るとは書いてあります。
私も、setlocalで出来ると気づくまでは、遅延展開したいときはファイルを2段構成にして、
------script.bat-------------
cmd /v:on scrpit-sub.bat %*
-----------------------------
のように書いてました。
 
 


カテゴリー「DEL,ERASE,REN…ファイル削除/復活/移動/名前の変更」索引へ
カテゴリー「遅延環境変数の展開」索引へ

 

カテゴリー一覧

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


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

資料書籍

About

2005年01月27日 13:26に投稿されたエントリーのページです。

ひとつ前の投稿は「定義ファイルを使った環境変数の一括設定」です。

次の投稿は「日付表示をMMDDHHMMYYYY形式にしたい」です。

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

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