MS-DOSバッチファイルコマンドのrenを使用して sample1__01.txt と sample2__02.txt の
__(アンダーバー2個)を_test_に置換して、sample1_test_01.txt とsample2_test_02.txt が
自動でできあがるようにしたいのですがうまくいきません。

見よう見まねで ren *__*.txt *_test_*.txt と書いて実行させてみたのですが
sample1__test_.txt と sample2__test_.txt となってしまいます。

どうすれば思いどうりの結果を得ることができるのでしょうか?
ご存知の方がおられましたらご回答をよろしくお願いします。

A 回答 (2件)

すいません。



誤:for %%A (*__*) do call :sub %%A
正:for %%A in (*__*) do call :sub %%A
    • good
    • 0
この回答へのお礼

早速やってみたところ問題を解決することができました。
ご回答していただきどうもありがとうございました。

お礼日時:2007/08/02 20:09

ren コマンドで * が使えるのはきわめて限定的なケースです。


ren A*.txt B*.txt のような。

バッチファイルを使って、1つずつリネームするしかないですね。
for %%A (*__*) do call :sub %%A
goto :eof
:sub
set A=%1
ren %A% %A:__=_test_%
goto :eof

この回答への補足

上記の記述をコピー&ペーストしてバッチファイルを実行してみたのですが
ファイル名を変更することができませんでした。
何かやり方に問題があったのでしょうか?

補足日時:2007/08/02 07:41
    • good
    • 0

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

このQ&Aを見た人はこんなQ&Aも見ています

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

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

Qbatファイルでrenameができません。

Windowsのbatファイルでrenameをするにはどうすればよいでしょうか?

カレントディレクトリ
└ A

というディレクトリ構造があって、Aの中には「a.txt」があるとします。

カレントディレクトリから、
「rename "./a/A.txt" B.txt」
と書いてあるbatファイルを起動しても、「a.txt」の名前が変更されません。

「指定したパスが見つかりません。」と出てきてしまいます。
ダブルクォーテーションを取ったりつけたり、絶対パス、相対パスを書いたりと
いろいろ試しましたがだめでした。

何か方法はないでしょうか?

Aベストアンサー

No1です。
すいません。A と a の違いに目が行ってしまってました。

>たとえばdirコマンドなどは「/」でも通ります。

通りません。/ はオプションの指定と解釈されます。
ただ、念のため確かめてみると、
"./filename" の時はdirでもrenameでも大丈夫ですね。copyなどでもOK。
"./dir/filename" だとdirでもrenameでも駄目です。
質問はこのケースに当たります。

ところが、リダイレクトの場合は、more < "./dir/filename" や more < "dir/filename" はOKですね。
なんとなくですが、「 " "で囲めば / も使えるようにしようと思ったけど途中でやめた」 感があります。


>なぜ同じコマンドプロンプトでコマンド毎に使えたり使えなかったりするのでしょう?

コマンドのプログラムの書き方次第なので、コマンドによっては、 / を受け付けたりします。
dir rename copy などはcmd.exeの中に組み込まれているので、同じ動きのはず。
別のプログラムである、fc.exe とかは / も使えますね。find.exe もOK。findstr.exe は駄目。

No1です。
すいません。A と a の違いに目が行ってしまってました。

>たとえばdirコマンドなどは「/」でも通ります。

通りません。/ はオプションの指定と解釈されます。
ただ、念のため確かめてみると、
"./filename" の時はdirでもrenameでも大丈夫ですね。copyなどでもOK。
"./dir/filename" だとdirでもrenameでも駄目です。
質問はこのケースに当たります。

ところが、リダイレクトの場合は、more < "./dir/filename" や more < "dir/filename" はOKですね。
なんとなくですが、「 " "で囲めば / も使え...続きを読む

Qファイル名の一部を変更するバッチファイル

フォルダ内にある複数ファイルを、バッチファイルで一括ファイル名変更をしようとしています。
元ファイル名は、
23_ABCA_K.txt
23_ABCL_K.txt
23_ABCL_E.txt
23_ABCA_K.txt というように、頭2桁(日付)は共通で4ファイルあります。

これを、頭2桁を維持して、アルファベットのところを変更したいのです。
23_ABCA_K.txt→23_件数表.txt
23_ABCL_K.txt→23_集計表.txt
23_ABCL_E.txt→23_エラー数.txt
23_ABCA_K.txt→23_合否.txt という具合です。

rename 23_ABCA_K.txt 23_件数表.txt
とすると、頭2桁が変化したときに対応できないし、

%date: などでシステム日付を取得すると、
23_ABCA_k.txtを24日に改名すると、23が保持されず24になってしまう・・・

現状のファイル名の一部を取得して、改名後のファイル名につける
ということはできるのでしょうか?

よろしくお願いします。

フォルダ内にある複数ファイルを、バッチファイルで一括ファイル名変更をしようとしています。
元ファイル名は、
23_ABCA_K.txt
23_ABCL_K.txt
23_ABCL_E.txt
23_ABCA_K.txt というように、頭2桁(日付)は共通で4ファイルあります。

これを、頭2桁を維持して、アルファベットのところを変更したいのです。
23_ABCA_K.txt→23_件数表.txt
23_ABCL_K.txt→23_集計表.txt
23_ABCL_E.txt→23_エラー数.txt
23_ABCA_K.txt→23_合否.txt という具合です。

rename 23_ABCA_K.txt 23_件数表.txt
...続きを読む

Aベストアンサー

日付の部分を?に

ren ??_ABCA_K.txt ??_件数表.txt

ワイルドカードの?は1文字何でも良いとなりますので
23日と24日があれば両方変更されます
それと、件数表と合否のファイル名が同じですよ

QMSDOSからワイルドカード指定で複数ファイル名の一部を一括変更

MSDOSからワイルドカード指定で複数ファイル名の一部を一括変更する方法はありますでしょうか?
例えば、
「a.dat.gz」「b.dat.gz」「c.dat.gz」
上記のような複数ファイルを以下のように変更したいと思っています。
「a.gz」「b.gz」「c.gz」

ちなみに次のコマンドを試してみたのですがダメでした。
ren *.dat.gz *.gz

実際はバッチファイルから処理をさせたいと思っています。
よろしくお願いいたします。

Aベストアンサー

★本当に『a.dat.gz』、『b.dat.gz』、『c.dat.gz』の形式の名前だけですか。
・上記の場合ならば、
 『for %%i in ( a b c ) do ren %%i.dat.gz %%i.gz』で出来ますけど。
 ※a、b、c 以外にあればカッコ内に増やして下さい。
 ※また、バッチファイル内ですので %% と2つにしています。コマンドラインでは % ですよ。
・他にもいろいろな方法はありますけど一例だけ紹介しました。
 ちなみに試していませんが、for 文を使えば ren も上手く利用できます。

その他:
・ワイルドカードの指定で拡張子は、最後のピリオドのフィールドを指します。
 よって、『ren *.dat.gz *.gz』という指定ではすでに拡張子が『.gz』なので上手く出来なかったのです。
・以上。参考に。

Qファイル名の一部を一括変更 コマンドプロンプト

先ほど
【拡張子のみ一括変更したい コマンドプロンプト】
http://oshiete.goo.ne.jp/qa/8862743.html
で質問させていただき無事解決いたしました!
どうもどうもありがとうございました!
更に同じような内容になるのかとは思いますが、
どうぞこの素人にご指導くださいます様お願いします。

あるフォルダに入っている下記のようなjpg画像があります。

コマンドプロンプトを使用して『photo』部分のみを削除したいのですが、
可能でしょうか?
   ・
   ・
   ・
『2014_1215photo.jpg』→『2014_1215.jpg』
『2014_1216photo.jpg』→『2014_1216.jpg』
『2014_1217photo.jpg』→『2014_1217.jpg』
『2014_1218photo.jpg』→『2014_1218.jpg』
   ・
   ・
   ・

*フォルダ内のファイルはすべてjpg
*すべて上記の規則にのったファイル名
*windoews8

どうぞよろしくお願いいたします。

先ほど
【拡張子のみ一括変更したい コマンドプロンプト】
http://oshiete.goo.ne.jp/qa/8862743.html
で質問させていただき無事解決いたしました!
どうもどうもありがとうございました!
更に同じような内容になるのかとは思いますが、
どうぞこの素人にご指導くださいます様お願いします。

あるフォルダに入っている下記のようなjpg画像があります。

コマンドプロンプトを使用して『photo』部分のみを削除したいのですが、
可能でしょうか?
   ・
   ・
   ・
『2014_1215photo.jpg』→『2014_1215...続きを読む

Aベストアンサー

もしかすると説明も必要かな?

ren *.jpg ?????????.jpg

ココで使用している * や ? はワイルドカードというものです

ワイルドカードの使い方
http://www.adminweb.jp/command/ini/index7.html

* は任意の文字列
? は任意の一文字

で、実行している動作は
ren(名前の変更)*.jpg(拡張子がjpgのファイルを)?????????.jpg(先頭から9文字.jpg)に変更

ということです

Qbatである文字列内に特定の文字列が含まれているか確認したい

batファイルの中である変数「abc」の中に「test」という文字が含まれていたら○○を行なうという分岐を作成したいのですが、どのように行なえばよいのでしょうか?

そのまま、ずばりのお答えお待ちしております。

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

Aベストアンサー

大文字小文字を区別しなくていいなら、

if not "%abc:test=%" == "%abc%" echo 含まれていた

区別するなら、

echo %abc% | find "test" >NUL
if not ERRORLEVEL 1 echo 含まれていた

Qバッチファイルで2つ以上の変数を連結し、1つの変数にしたい。

Windows2000でバッチファイルを作っています。
バッチファイルが受け取る2つのパラメータを %1 %2とすると、
それを連結して、新たな変数 A を作りたいのですが、どのようにすれば良いのでしょうか。

Aベストアンサー

SETで変数にパラメータをセットすればOKだと思います。

例)
SET A=%1%2
echo %A%

Qbatでファイル名を変更したい(元ファイル名の一部を削除したファイル名に)

batファイルを使ってファイル名を変更する方法を教えてください。
例えば、
変更元ファイル:tata1234.exe
変更先ファイル:tata.exe(元ファイル名の一部を削除した名前)

流れでは、あるファイルをbatにドラッグ&ドロップして
COPY %1 %TMP%\%~nx1
REN %TMP%\%~nx1 ???????
変更したファイルを元ファイルのあったフォルダに移動(orコピー)

別ファイルに出力したりしないと無理でしょうか?宜しくお願いいたします。

Aベストアンサー

元ファイル名の先頭4文字まで残して5文字目以降を消すということでいいでしょうか。

set NAME=%~n1
REN %TEMP%\~nx1 %NAME:~0,4%.%~x1

>変更したファイルを元ファイルのあったフォルダに移動(orコピー)
これはどういう意味?変更とは?

QDOSコマンドでファイル名の一部を変更したい

複数のフォルダ内に、下記のようなファイルがあります。

ABCD_aaaa_20091234567899_1_of_3.csv
ABC_DDD_bbbb_20091234567899_2_of_3.csv
AAA_ccccd_20091234567899_3_of_3.csv

作業内容:ファイル名の「2009xxxxxxxxxx」を「FY08_01」
に変更します。
現在のファイルの状態:
・「2009」の後の数字「xxxxxxxxxx」は共通で、10桁あります。
・「2009xxxxxxxxxx」の前のテキストの文字数や内容は一致
していません。
・「2009xxxxxxxxxx」の前後には必ず「_」(アンダースコア)があります。
・「2009xxxxxxxxxx」の後は必ず「x_of_x」となっています。

そこでDOSコマンドこんな風に書いてみたのですが、構文エラーとなってしまいました。
*********
echo off
for %%a in (*_*.csv) do (
set fname=%%a
set fname=%fname:~-25,14="FY09_01"%
ren %%a %fname%
)
*********
Webで検索して他の方法もいろいろと試したのですが、余計にわからなくなってきてしまいました。setコマンドはワイルドカードが使えないので頭をかかえています。
どなたかご教示いただければ幸いです。

よろしくお願いします。

複数のフォルダ内に、下記のようなファイルがあります。

ABCD_aaaa_20091234567899_1_of_3.csv
ABC_DDD_bbbb_20091234567899_2_of_3.csv
AAA_ccccd_20091234567899_3_of_3.csv

作業内容:ファイル名の「2009xxxxxxxxxx」を「FY08_01」
に変更します。
現在のファイルの状態:
・「2009」の後の数字「xxxxxxxxxx」は共通で、10桁あります。
・「2009xxxxxxxxxx」の前のテキストの文字数や内容は一致
していません。
・「2009xxxxxxxxxx」の前後には必ず「_」(アンダースコア)があります。
・「200...続きを読む

Aベストアンサー

#2です。考えすぎたようです orz.....
#1の方の回答のままでは駄目ですが、

@echo off
for %%a in (*_*.csv) do call :sub %%a
goto :EOF
:sub
set A=%1
ren %A% %A:~0,-25%FY08_1%A:~-10%
goto :EOF

Qバッチファイルで昨日の日付を取得

すみません、どなたか教えて下さい。

バッチファイルの記述で、昨日の日付を取得する方法を教えて下さい。
今日の日付は下記のように取得しています。

rem 日時変数の取得
for /f "tokens=1-3 delims=/" %%a in ('echo %date:~-10%') do (set YYYYMMDD=%%a%%b%%c
)

Aベストアンサー

:: ----- prevdate.bat はじめ -----
@echo off
::今日の日付を取得
set yy=%date:~0,4%
set mm=%date:~5,2%
set dd=%date:~8,2%
echo 今日は、%yy%年%mm%月%dd%日です。

::1日前の日付を計算する
set /a dd=%dd%-1
set dd=00%dd%
set dd=%dd:~-2%
set /a ymod=%yy% %% 4
if %dd%==00 (
if %mm%==01 (set mm=12&& set dd=31&& set /a yy=%yy%-1)
if %mm%==02 (set mm=01&& set dd=31)
if %mm%==03 (set mm=02&& set dd=28&& if %ymod%==0 (set dd=29))
if %mm%==04 (set mm=03&& set dd=31)
if %mm%==05 (set mm=04&& set dd=30)
if %mm%==06 (set mm=05&& set dd=31)
if %mm%==07 (set mm=06&& set dd=30)
if %mm%==08 (set mm=07&& set dd=31)
if %mm%==09 (set mm=08&& set dd=31)
if %mm%==10 (set mm=09&& set dd=30)
if %mm%==11 (set mm=10&& set dd=31)
if %mm%==12 (set mm=11&& set dd=30)
)
echo 昨日は、%yy%年%mm%月%dd%日です。

echo.
pause
:: ----- prevdate.bat おわり -----

参考URL:http://www.atmarkit.co.jp/fwin2k/win2ktips/419batchdate/batchdate.html

:: ----- prevdate.bat はじめ -----
@echo off
::今日の日付を取得
set yy=%date:~0,4%
set mm=%date:~5,2%
set dd=%date:~8,2%
echo 今日は、%yy%年%mm%月%dd%日です。

::1日前の日付を計算する
set /a dd=%dd%-1
set dd=00%dd%
set dd=%dd:~-2%
set /a ymod=%yy% %% 4
if %dd%==00 (
if %mm%==01 (set mm=12&& set dd=31&& set /a yy=%yy%-1)
if %mm%==02 (set mm=01&& set dd=31)
if %mm%==03 (set mm=02&& set dd=28&& if %ymod%==0 (set dd=29))
if %mm%==04 (set mm=03&& set dd=31)
if...続きを読む

Qコマンドプロンプトでファイル名に含まれるスペースを別の文字に置換したい

コマンドプロンプトでファイル名に含まれるスペースを別の文字に置換したい

BAT実行や、BATにドロップする程度の操作でファイル名置換したいと思っています。

たとえば、「abcTEST123.txt」というファイルを下記のバッチにドロップすると、
「abctest123.txt」と言うファイル名に置換されます。

for %%A in (*TEST*.txt) do call :sub %%A
:sub
set A=%1
ren %A% %A:TEST=test%

しかし「TEST」をスペースにしてもファイル名の置換はできません。
コマンドプロンプトではスペースは扱えないのでしょうか。
解決策がありましたらご教授願います。

Aベストアンサー

>しかし「TEST」をスペースにしてもファイル名の置換はできません。
>コマンドプロンプトではスペースは扱えないのでしょうか。
普通はその通りです。スペースは区切り文字ですので。
スペースを含むファイル名などの場合、" で囲みます。

質問文のバッチに手を加えるなら、以下のようにしたら成功しました。
--------------------
rem echo %1
for %%A in ("* *.txt") do call :sub "%%A"
goto :end

:sub
rem echo %1
set A=%1
ren %A% "%A: =T%"

:end
rem pause
--------------------
これで、
abc 123.txt を
abcT123.txt にリネームできました。

ところで、おかしな点があります。
・>ファイルをドロップ
 とありますが、意味を成していません。
 変数としてフルパスがバッチに渡されますが、参照する記述がないので。
・for文でファイル名を探しています。が、対象のフォルダは
 バッチ起動時のパス内のみであり、ドラッグ&ドロップされたファイルのフルパスとは
 無関係です。
・for 文で :sub を呼びますが、その後次行に移りますがそれが :sub です。
 バッチの流れがおかしいです。(上記バッチでは修正しました)


バッチが終わるとDOS窓がすぐ閉じてしまうので、
最後にpause でも書いておくといいです。
コマンドがどのように展開されてるか、や、エラーがあればわかります。

>しかし「TEST」をスペースにしてもファイル名の置換はできません。
>コマンドプロンプトではスペースは扱えないのでしょうか。
普通はその通りです。スペースは区切り文字ですので。
スペースを含むファイル名などの場合、" で囲みます。

質問文のバッチに手を加えるなら、以下のようにしたら成功しました。
--------------------
rem echo %1
for %%A in ("* *.txt") do call :sub "%%A"
goto :end

:sub
rem echo %1
set A=%1
ren %A% "%A: =T%"

:end
rem pause
--------------------
これで、
abc 123.txt...続きを読む


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報