環境: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 --------------
と言うように、出来るでしょうか?
厚かましい質問ですが、よろしくお願いいたします。
No.4ベストアンサー
- 回答日時:
以下のようにすれば望みのことができます。
#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
#但し上記方法では、対象ファイルが同一フォルダ内かフォルダ名に「.」が
#複数入っていないことが条件です。
出来ました。(うれしい!)
リファレンスの「for文」項目で「tokens, delims」などは認識していたのですが、いまいち私には理解出来ていませんでした。
delims = 引数を指定文字列でスプリット(分割)
tokens = スプリットされた要素の配列インデックス(的?)
と解釈しましたが、間違っていませんか?
No.5
- 回答日時:
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バッチと対象のファイルが同一のフォルダにあるものとしています。
No.3
- 回答日時:
「特定の拡張子を持った一覧ファイルに記述されたファイル全てを特定拡張子に変換する」というのでしたら
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
とリネームされるはずです。
実は、この改名処理は某エディタのマクロから呼び出す形で実行しておりまして、そのマクロではバッチコマンドではなくて、Perlスクリプトを呼び出しています。
しかし、出来るならソフト(Perl)に依存することなくOS標準の機能で簡単に、且つ、スマートに出来ないかと思い質問した次第です。お手を煩わしてすみません。
sed, awkのサンプルソースまで用意していただき、ありがとうございました。
No.2
- 回答日時:
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 …
> BATファイルはそういうことをするものではないので
はい、バッチ処理の得手、不得手と言うものが全く理解できていません。
WSHは「勉強しよう」と思った事もあるのですが、それより先にPerlに飛びついてしまいました。
「それなら、最初からPerlでやれよ!」というお叱りを受けそうですが、この改名処理は某エディタのマクロから呼び出す形で実行しております。
ですので、出来るならソフト(Perl)に依存することなくOS標準の機能(WSHも標準?)で簡単に、且つ、スマートに出来ないかと思い質問した次第です。お手を煩わしてすみません。
WSHのサンプルソースまで用意していただき、ありがとうございました。
WSHも勉強してみます。
No.1
- 回答日時:
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) あるフォルダーのファイルを違う親フォルダーのサブフォルダーに移したい 11 2023/02/15 19:00
- その他(プログラミング・Web制作) ファイル名の一部をbatで変更したい batファイルを使って、以下のようにファイル名の一部を変更した 3 2023/02/21 20:09
- Excel(エクセル) エクセルのマクロについて教えてください。 1 2023/02/03 13:18
- Excel(エクセル) 【VBA】指定フォルダに格納中のテキストファイルをエクセルで処理し結果のエクセルを新規フォルダに保存 1 2022/03/25 14:19
- その他(プログラミング・Web制作) フォルダ内の特定 拡張子のファイルを一括実行するBat ファイルについて 4 2022/04/17 09:51
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- Visual Basic(VBA) VBAでエクセルをtxtに変換するとエクセルでカンマを含む文字数字がtxtでは「""」付にならないよ 1 2022/08/27 12:17
- Visual Basic(VBA) エクセルのマクロについて教えてください。 4 2023/02/05 09:55
- SQL Server PCが悪くなって新しいPCにSSMSのデータを移すよう頼まれたけど移し方が分からない 1 2023/05/18 16:54
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/07/15 15:48
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
パソコンで、「ヴ」を入力したいの...
-
起動ディスクダウンロード
-
IMEオプションが開かない
-
半角数字で電話番号を入れてる...
-
MS-DOS6.2でCD-ROMドライブを認...
-
WIN10 起動直後の画面が緑色になる
-
PCのコンセント電源オンにする...
-
Windows 2000で動作して現在のW...
-
ガラホの青い点滅は何が来てい...
-
現在使用中の壁紙のファイルの...
-
widows xpのエラーで利用がで...
-
Windows NT 4.0 のシステム要件
-
IME辞書の単語登録について
-
PC(NVIDIAコントロールパネル...
-
win2000をwin10で使っているパ...
-
GTX1080 電源
-
Macbook Pro Bootcamp-Windows1...
-
BIOS設定画面から抜け出せない。
-
アイコンがコピーされる現象
-
パソコンが動きません、パソコ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
パソコンで、「ヴ」を入力したいの...
-
起動ディスクダウンロード
-
半角数字で電話番号を入れてる...
-
IME辞書の単語登録について
-
WIN10 起動直後の画面が緑色になる
-
MS-DOS6.2でCD-ROMドライブを認...
-
Windows 2000で動作して現在のW...
-
コイカツ!インストールできませ...
-
IMEオプションが開かない
-
GTX1080 電源
-
Windows meのisoダウンロード
-
現在使用中の壁紙のファイルの...
-
エクセルで文字の色を変えよう...
-
ガラホの青い点滅は何が来てい...
-
PCのコンセント電源オンにする...
-
Windows10でのBD-REドライブの...
-
アプリケーションを起動できま...
-
最大メモリを0にしてしまった...
-
PCに致命的エラー
-
BIOS設定画面から抜け出せない。
おすすめ情報