出産前後の痔にはご注意!

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

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

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

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

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

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

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

A 回答 (4件)

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 は駄目。
    • good
    • 0
この回答へのお礼

なるほど、そもそも統一されていないということなんですね。
基本的にWindowsを使う場合は、パス名は「\」を使ったほうが無難なようで…
わかりやすい説明、大変参考になりました。ありがとうございました。

お礼日時:2014/09/08 23:14

コマンドラインスイッチとしてスラッシュを使う場合があります。


ということで、パス区切りにスラッシュが使えない。ということもあるでしょう。
# https://www.ipa.go.jp/security/awareness/vendor/ …

APIに直接渡す文字列としてならスラッシュでパス区切りに出来るかも知れませんが…。
コマンドライン引数だと、そのプログラムが使用している解析処理次第…でしょうね。
    • good
    • 0
この回答へのお礼

統一して作られていると思ったら、複雑な状態になっているようで…
ご回答ありがとうございます。参考になりました。

お礼日時:2014/09/08 23:16

windowsですよね?


スラッシュではなくバックスラッシュ(円マーク)では?

この回答への補足

ありがとうございます。無事できました。
…が、ちょこっと調べてみたところ、Windowsではパスの区切りは「\(バックスラッシュ)」とのことですが、たとえばdirコマンドなどは「/」でも通ります。
なぜ同じコマンドプロンプトでコマンド毎に使えたり使えなかったりするのでしょう?

本文とそれた質問で大変申し訳ありませんが、もしよろしければご回答よろしくお願いします。

補足日時:2014/09/08 22:34
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
おかげで解決できました。

お礼日時:2014/09/08 23:17

お書きのファイル配置なら、


>「rename "./a/A.txt" B.txt」
じゃなくて
「rename "./A/a.txt" B.txt」
ですね。まあ、Windowsは英字の大文字小文字を区別しないので、これが原因でエラーにはなりませんが。
ただ、大文字小文字に無頓着ということは、全角半角にも無頓着で間違えてたりしないでしょうか?
Windowsでも全角半角は区別されますので、正確に同じように指定する必要があります。

コマンドプロンプトの上に、ファイルをドロップするとフルパスファイル名が得られるので、それをコピペするのが間違いないと思います。

この回答への補足

すみません質問文のミスでした。
「rename "./a/A.txt" B.txt」
ではなく
「rename "./A/a.txt" B.txt」
で、名前変更ができないということです。

補足日時:2014/09/08 22:02
    • good
    • 0

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

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

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

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

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

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

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

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

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

Aベストアンサー

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

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

区別するなら、

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

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日があれば両方変更されます
それと、件数表と合否のファイル名が同じですよ

QMS-DOSバッチファイルコマンドのrenを使用してファイル名を置換することができない

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ベストアンサー

すいません。

誤:for %%A (*__*) do call :sub %%A
正:for %%A in (*__*) do call :sub %%A

Qバッチ処理でファイルの中身を変数に入れるやり方

あるファイルの中には1行の文字列があります。
このファイルをバッチで読み取り、変数に設定したいです。

例:
test.txt
abcacbacbacbacbacbacbacbacb

test,bat
set DATA=[test.txtを読み込んだ値]

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

Aベストアンサー

これですね。

参考URL:http://www.upken.jp/kb/dqvgHNRUxwFDkmtoqEwfXHUjDrevNv.html

Q特定のフォルダ内のある種類のファイルをすべてコピーし格納する方法

WINDOWSマシン使用。
あるフォルダ(AAA)の中に、複数のフォルダやファイルを含み、またそのフォルダは、
は、下位のフォルダやファイルを含むという関係が続きます。階層は4くらい。
この中の各所にあるフォルダにはwordのファイルやその他のファイルを含んで
います。
このwordのファイルだけをすべて選択しコピーして、別のフォルダ(BETU)へ
入れたい。
簡単に行なう方法、あるいはツールなどあれば紹介をお願いします。

Aベストアンサー

はじめまして。

コマンドプロンプトで
for /f "tokens=*" %i in ('dir /b /s AAA\*.doc') do copy "%i" "BETU"
を実行すれば4階層以上深くても可能です。

※"%i" "BETU"と"でくくるのは、ディレクトリ名に空白がある場合エラーとなるのを防ぐためです。

AAAもBETUもフルパスで記述すればコマンド実行ディレクトリは何処でも構いません。

Qコマンドプロンプトの「%1」と「%~1」の違いがわからない

コマンドプロンプトの「%1」と「%~1」の違いがわからない
このサイトにhttp://ykr414.com/dos/bat.html
%~1は「全ての引用句(")を削除して%1を展開する。」とありますがよくわかりません。

%1は入力されたファイルのフルパスだと思っているのですけど。
"%1"=%~1ということでしょうか。

Aベストアンサー

%1は、バッチファイルに指定された「第一引数」です。
バッチファイルに限らず、プログラムを実行するときには引数を指定することができます。
単純に関連づけて実行するとかバッチファイルのアイコンにファイルをにドラッグドロップするとかだと、引数は一つない場合が多いですが、
実際にはショートカットを作ったりコマンドプロンプトから指定するとか、二つ以上の引数を指定することができます。
その際、引数と引数の間はスペースで区切られます。(引数指定全体の文字列を、スペースで区切って各引数に分割する)

一方、例えば、マイドキュメントフォルダ「C:\Documents and Settings\ユーザー名\My Documents」を引数にを指定した場合、そのままだとフォルダ名に空白が入ってるので、
%1=C:\Documents
%2=and
%3=Settings\ユーザー名\My
%4=Documents
と、指定した一つの名前が複数の引数に分断されてしまします。

そこで、こういう場合には、ダブルクオートでファイル名を括ります。
プログラム起動時の引数に 「"C:\Documents and Settings\ユーザー名\My Documents"」
といった感じで、ダブルクオートを付けたものを指定すると、
%1="C:\Documents and Settings\ユーザー名\My Documents"
と、括られた部分がまとめて一つの引数と取り扱われるようになります。
そして、この時%~1は
%~1=C:\Documents and Settings\ユーザー名\My Documents
になります。

%1と%~1の使い分けですが、
引数をこのままファイル名として使う時は、%1をそのまま使えば問題ないのです。
(バッチファイルから別のプログラムを起動するときにファイル指定するとかだったら、
%1を使えば、ダブルクオート込みで渡されるので、そのまま一つの引数としてつかます)

一方、フォルダを指定してそのフォルダ下のファイル名を作る、といった処理をしようとする時には、
ダブルクオートが邪魔なので、そういう時は%~1を使います。
たとえば、指定した引数をフォルダとして、そのフォルダ下の「新規作成データ.txt」ファイルを表すフルパスのファイル名を作りたい場合、

単に
 「%1\新規作成データ.txt」とすると、「"C:\Documents and Settings\ユーザー名\My Documents"\新規作成データ.txt」になってしまいますが、

「"%~1\新規作成データ.txt"」とすれば「"C:\Documents and Settings\ユーザー名\My Documents\新規作成データ.txt"」という、正しくクオートされたファイル名を作ることができます。

%1は、バッチファイルに指定された「第一引数」です。
バッチファイルに限らず、プログラムを実行するときには引数を指定することができます。
単純に関連づけて実行するとかバッチファイルのアイコンにファイルをにドラッグドロップするとかだと、引数は一つない場合が多いですが、
実際にはショートカットを作ったりコマンドプロンプトから指定するとか、二つ以上の引数を指定することができます。
その際、引数と引数の間はスペースで区切られます。(引数指定全体の文字列を、スペースで区切って各引数に分割す...続きを読む

Qバッチファイル 文字列にスペースがある場合

for /f %%A in ('dir /b /s c:\a aa*.pdf') do copy "%%A" D:\

これはcドライブのa aaというフォルダ名の中を検索するコードですが、
フォルダ名にスペースがあるため、うまく動きません。

"a aa"のように""で囲ってみましたが、駄目でした。

どうすれば良いのか、教えていただきたいので、お願いします。

Aベストアンサー

for /f %%A in ('dir /b /s c:\"a aa"\*.pdf') do echo copy "%%A" D:\
のようにecho でどのようなコマンドが実行されているか確認しましょう。

この記述ではdirコマンドで表示されるパスの中に空白があるため %%A には空白までの文字列しか代入されません。
以下のように修正して試してみてください。

for /f "delims=" %%A in ('dir /b /s c:\"a aa"\*.pdf') do copy "%%A" D:\

Qコマンドプロンプトによるフォルダ内のファイル存在有無

バッチ処理で、特定のフォルダ内(配下にフォルダとファイルが混在している)でファイルだけの存在有無を調べて、ファイルが存在している場合とファイルが存在していない場合で処理を別々に行わせようとしたいのですが、ファイルの存在有無はどのようにコマンドで調べれば良いでしょうか?

DIR C:\test\*.* でファイルを調べて、ERRORLEVELでif判定させようと思っているのですが、 DIRコマンドでこれを行うと、フォルダまで表示されます。

どのようにしたら良いのでしょうか?教えてください。

Aベストアンサー

コマンドプロンプトで、「DIR /?」と入力すれば、DIRコマンドのヘルプが表示されます。

その記述によれば
「/A」属性スイッチで、必要な属性を持つファイルを指定できます。

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)に変更

ということです

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

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

Aベストアンサー

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

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


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

人気Q&Aランキング

おすすめ情報