環境:Windows 2000Pro

現在、拡張子を変換するのに以下のような処理をしています。

1)変換対象ファイルの一覧をバッチ・ファイルとして保存。
  // bak_lst.cmd ----------------------------
   ren E:\Test\Sample.txt Sample.bak
   ren E:\Test\Sample02.txt Sample02.bak
            :
  // bak_lst.cmd -END -----------------------

2)起動用バッチ・ファイル(to_bak.cmd)からCALL文で(1)にて作成したバッチ・ファイルを呼び出す。
  // to_bak.cmd ---------------
   @echo off
   call E:\Test\bak_lst.cmd
  // to_bak.cmd -END ----------

■ これを、

1)変換対象ファイルの一覧は、ファイル名のみの羅列でテキストファイルとして保存。
  // bak_lst.txt ------------
   E:\Test\Sample.txt
   E:\Test\Sample02.txt
        :
  // bak_lst.txt -END -------

2)バッチ・ファイルで(1)にて作成したテキストファイルを読み込んで拡張子の変換を実行。
  //???.cmd: for %%f in (E:\Test\list.txt) do ren ・・・
  // 結果 -------------------
   E:\Test\Sample.bak
   E:\Test\Sample02.bak
        :
  // 結果 -END --------------

と言うように、出来るでしょうか?

厚かましい質問ですが、よろしくお願いいたします。

このQ&Aに関連する最新のQ&A

A 回答 (5件)

以下のようにすれば望みのことができます。


#Windows2000 sp2で確認済


/* 1.cmd
for /F %%a in (bak_lst.txt) do call rencmd.cmd %%a

/* rencmd.cmd
for /F "tokens=1,2 delims=." %%b in ("%1") do rename %%b.%%c %%b.bak


#但し上記方法では、対象ファイルが同一フォルダ内かフォルダ名に「.」が
#複数入っていないことが条件です。
    • good
    • 0
この回答へのお礼

出来ました。(うれしい!)
リファレンスの「for文」項目で「tokens, delims」などは認識していたのですが、いまいち私には理解出来ていませんでした。

delims = 引数を指定文字列でスプリット(分割)
tokens = スプリットされた要素の配列インデックス(的?)

と解釈しましたが、間違っていませんか?

お礼日時:2001/07/27 19:46

delims で指定出来るのは文字列では無く単一の文字です。


tokens の解釈はそれであっています。

あとtokens の指定で tokens=1,2* とすると
分割したtokenの2番目以降を2つ目の変数に全部渡すことが出来ます。
(今回だと %Cに)

また以下の方法でファイルリスト使う方法の替わりが出来ます

/+ for /F %%a in (bak_lst.txt) do call rencmd.cmd %%a の替わり
FOR /F "usebackq " %%i IN (`dir /B *.txt`) DO call rencmd.cmd %%i

#上記はCMDバッチと対象のファイルが同一のフォルダにあるものとしています。
    • good
    • 0
この回答へのお礼

複数の質問に回答していだだき、ありがとうございました。
お陰で、for文の理解度がアップしました。

お礼日時:2001/07/28 08:09

「特定の拡張子を持った一覧ファイルに記述されたファイル全てを特定拡張子に変換する」というのでしたら


sedやawkを組み合わせれば可能です。

ファイル一覧として
---- list.txt -----
aaaaa.txt
bbbbb.txt
cccb.txt
---- list.txt -----
と書かれているとします。

バッチとスクリプトとして
---- reext.bat -----
sed -f sp list.txt >tmp
awk -f sp2 tmp >tmp.bat
call tmp.bat
del tmp
del tmp.bat
---- reext.bat -----
---- sp -----
s/.txt//g
---- sp -----
---- sp2 -----
{printf("ren %s.txt %s.bak\n", $0, $0)}
---- sp2 -----
この3つのファイルをつくり、reext.batを実行すると
list.txtの中のファイルが
aaaaa.txt -> aaaaa.bak
bbbbb.txt -> bbbbb.bak
cccb.txt -> cccb.bak
とリネームされるはずです。
    • good
    • 0
この回答へのお礼

実は、この改名処理は某エディタのマクロから呼び出す形で実行しておりまして、そのマクロではバッチコマンドではなくて、Perlスクリプトを呼び出しています。
しかし、出来るならソフト(Perl)に依存することなくOS標準の機能で簡単に、且つ、スマートに出来ないかと思い質問した次第です。お手を煩わしてすみません。

sed, awkのサンプルソースまで用意していただき、ありがとうございました。

お礼日時:2001/07/26 20:02

 BATファイルはそういうことをするものではないので、やりたいのであればWSHを勉強した方が近道です。


 リファレンスでよければマイクロソフトのページに掲載されていますので、そこを見てみてください。
 2000には最初からWSHが入ってるはずです。

--------------------○
TargetFile="bak_lst.txt"
Set fso = CreateObject("Scripting.FileSystemObject")
Set bkl = fso.OpenTextFile(TargetFile,1)

Do While bkl.AtEndOfLine = False
lFile = bkl.ReadLine
If fso.FileExists(lFile) = True Then
nFile = Replace(lFile, ".txt", ".bak")
fso.MoveFile lFile, nFile
End If
Loop
--------------------○

 サンプルってことでこういうの作ってみました。
 「----○」の範囲内を to_bak.vbs というファイル名で保存し、bak_lst.txt をこのファイルと同じフォルダに作って to_bak.vbs をダブルクリックします。するとbak_lst.txt の中に記載されたファイルがすべて、bak に置き換わります。

 ただしこれはあくまでサンプルなので、ファイルは .txt のみ対象です。また、対象ファイルは必ずフルパスで記載されていなければならず、ファイル名のどこかに拡張子以外で「.txt」という文字が含まれていると誤動作します。

参考URL:http://www.microsoft.com/japan/developer/scripti …
    • good
    • 0
この回答へのお礼

> BATファイルはそういうことをするものではないので
はい、バッチ処理の得手、不得手と言うものが全く理解できていません。

WSHは「勉強しよう」と思った事もあるのですが、それより先にPerlに飛びついてしまいました。
「それなら、最初からPerlでやれよ!」というお叱りを受けそうですが、この改名処理は某エディタのマクロから呼び出す形で実行しております。
ですので、出来るならソフト(Perl)に依存することなくOS標準の機能(WSHも標準?)で簡単に、且つ、スマートに出来ないかと思い質問した次第です。お手を煩わしてすみません。

WSHのサンプルソースまで用意していただき、ありがとうございました。
WSHも勉強してみます。

お礼日時:2001/07/26 19:58

たぶんそういうことはできないと思います。



参考URL:http://www1.plala.or.jp/tsune/2msdos.html#c_for
    • good
    • 0
この回答へのお礼

そうですか。
彼是やってもエラーばかりが返ってくるので質問したんですが、残念です。

回答ありがとうございました。

お礼日時:2001/07/26 19:54

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QC:\_RESTORE\TEMPにはどれくらいのファイルがあるのが妥当ですか?

タイトルそのままなんですけど、当方のパソコンには55500ものファイルが存在し、容量も10G近くにもなっています。ウィルス検索にも非常に時間がかかり困っています。システムでは復元のところチェックいれてるんです。パソコンの動作をスムーズにスリムにするにはどうすればよいでしょうか??アドバイスお願いします。OSはWinMeでHDD40Gメモリーは128Mです。

Aベストアンサー

私も使っていますが、システムの復元は必要無いとおもいます。
要らない復元ポイントを消去したり、コントロールパネル→システム→パフォーマンスのボタンを押す→システムの復元に使うディスクを減らすといいですよ(しかし、古い復元ポイントから消えます。)

QC:\WINDOWS\system32\ntoskrnl.exe が存在しないか壊れている

下記のエラーが表示され Windows が立ち上がりません。

"C:\WINDOWS\system32\ntoskrnl.exeが存在しないか壊れているためWindowsが起動できません。上記のファイルをインストールしてください。"

Windows 2000/XP の緊急修復ディスク (ERD) を作成し、起動試みましたが結果変わりません。

レスキュー方法を教えて下さい。

OS : Windows 2000
Model : FMV 7000FL

[追記]
色々調べているうちに、「これは実際に ntoskrnl.exe や hal.dll が破損している場合よりも、boot.ini の記述が実際の情報と食い違っている場合に発生する」というものを見つけました。
この場合の対処として「boot.ini ファイルの記述を見直してください」とありますがどういうことなのでしょうか?
<http://homepage2.nifty.com/winfaq/w2k/boot.html#1208>

Aベストアンサー

Win2000インストールCDはお持ちですか?

お持ちなら別のPCでBOOT.INIを作りフロッピーなどに保存しておき、
Win2000のCDから起動して回復コンソールのCOPYコマンドでBOOT.INIを上書きさせます、

BOOT.INIの記述は、
オンボードIDEのプライマリマスタの第一パーティションが起動させたいパーティションであれば、

[boot loader]
timeout=30
default=multi(0)disk(0)rdisk(0)partition(1)\WINNT
[operating systems]
multi(0)disk(0)rdisk(0)partition(1)\WINNT="Microsoft Windows 2000 Professional" /fastdetect

となります、

http://nobumasa-web.hp.infoseek.co.jp/multi_boot/windows.html#kaifuku

HDDを取り出して他のPCに接続できるなら、
BOOT.INIを直接編集でも可能。

Win2000インストールCDはお持ちですか?

お持ちなら別のPCでBOOT.INIを作りフロッピーなどに保存しておき、
Win2000のCDから起動して回復コンソールのCOPYコマンドでBOOT.INIを上書きさせます、

BOOT.INIの記述は、
オンボードIDEのプライマリマスタの第一パーティションが起動させたいパーティションであれば、

[boot loader]
timeout=30
default=multi(0)disk(0)rdisk(0)partition(1)\WINNT
[operating systems]
multi(0)disk(0)rdisk(0)partition(1)\WINNT="Microsoft Windows 2000 Professiona...続きを読む

QC\_restore\のファイルを削除しました

OSはMe

復元をしないと設定した後
ウイルスに感染したC\_restore\のファイルを操作ミスで削除しました。

何か問題はありますでしょうか?
もしフリーズしたらとびくびくしております。
どうかお願いします。

Aベストアンサー

C:\_restore\
はシステムの復元機能が復元ポイントとなった時点でのシステムの情報をバックアップするフォルダです。
ウィルスに感染した場合、ウィルスごとシステムの情報がバックアップされることは良くあります。


> 何か問題はありますでしょうか?

復元ポイントは適当なタイミングで自動的に作成されますから、
「ウィルスに感染していた時期の設定に戻したい」
という事がなければ、問題なしです。

QC:\_RESTORE\TEMP0021090.CPYにウィルスが~~~

RESTOREにウィルスが~~~感染しました
ウイルスバスター2002をつかってるんですけど
C:\_RESTORE\TEMP0021090.CPYと
C:\_RESTORE\TEMP0025840.CPYとか
C:\_RESTORE\TEMP『数字』.CPY という名前のファイルに
『WORM_BADTRANS.B』が7体感染してしまいました。
消去ができず隔離もできなく 処理できません と表示されます。
ファイル名はわかっていて消去できない~~~なんて
最悪です消去の方法を教えてください。
補足・アドバイス・回答 をお願いします

Aベストアンサー

ここでは書ききれませんので、トレンドマイクロ社の対策WEBをご覧ください。
具体的な駆除方法は記載されていますよ。

駆除方法
http://www.trendmicro.co.jp/esolution/solutionDetail.asp?solutionID=2186

対策WEB Top
http://www.trendmicro.co.jp/badtrans/index.asp

QC:\WINDOWS\Cookies\index.dat

C:\WINDOWS\Cookiesフォルダーにあるindex.datと言うファイルがクッキーの数が増えていくたびに大きくなっているのですが、
クッキーは削除できるのですが、このファイルだけ削除しようとしても削除できないのです、
とりあえずメモ帳で開こうとしても共有違反で開けないと出てしまいます、

これは何をするファイルなんでしょう?

Aベストアンサー

私も同様の症状で悩みました。index.datが消せない上に、
サイズが大きくなっていくのです。
エディタで強引に開いたところ、やはりcookie関連の情報と
思われるデータでした。

マイクロソフトのサポートセンターに電話して、
担当者と相談した結果、以下の方法で暫定的に
解決いたしました。

1.DOSモードでPCを起動
2.DOSコマンドを使用して、該当ファイルを削除
   cdコマンドで該当ディレクトリに降りる
   delコマンドでindex.datを削除

WinMeを使用している場合は、起動ディスクから
PCを起動して、DOSモードに入る必要があります。
しかし、umechinさんが述べているように、
次にWebにアクセスすると、このファイルはまた作成されます。

私は、定期的に上の方法でindex.datを消しています。
index.datの内容を盗み見るタイプのワームがありますので、
なるべく頻繁に消去しておいた方がよいと思われます。


人気Q&Aランキング

おすすめ情報