• ベストアンサー

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

Windowsのbatファイルでrenameをするにはどうすればよいでしょうか? カレントディレクトリ └ A というディレクトリ構造があって、Aの中には「a.txt」があるとします。 カレントディレクトリから、 「rename "./a/A.txt" B.txt」 と書いてあるbatファイルを起動しても、「a.txt」の名前が変更されません。 「指定したパスが見つかりません。」と出てきてしまいます。 ダブルクォーテーションを取ったりつけたり、絶対パス、相対パスを書いたりと いろいろ試しましたがだめでした。 何か方法はないでしょうか?

  • n_i_g
  • お礼率52% (20/38)

質問者が選んだベストアンサー

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4846/10257)
回答No.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 は駄目。

n_i_g
質問者

お礼

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

その他の回答 (3)

  • Wr5
  • ベストアンサー率53% (2177/4070)
回答No.3

コマンドラインスイッチとしてスラッシュを使う場合があります。 ということで、パス区切りにスラッシュが使えない。ということもあるでしょう。 # https://www.ipa.go.jp/security/awareness/vendor/programmingv1/b08_01.html APIに直接渡す文字列としてならスラッシュでパス区切りに出来るかも知れませんが…。 コマンドライン引数だと、そのプログラムが使用している解析処理次第…でしょうね。

n_i_g
質問者

お礼

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

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

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

n_i_g
質問者

お礼

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

n_i_g
質問者

補足

ありがとうございます。無事できました。 …が、ちょこっと調べてみたところ、Windowsではパスの区切りは「\(バックスラッシュ)」とのことですが、たとえばdirコマンドなどは「/」でも通ります。 なぜ同じコマンドプロンプトでコマンド毎に使えたり使えなかったりするのでしょう? 本文とそれた質問で大変申し訳ありませんが、もしよろしければご回答よろしくお願いします。

  • notnot
  • ベストアンサー率47% (4846/10257)
回答No.1

お書きのファイル配置なら、 >「rename "./a/A.txt" B.txt」 じゃなくて 「rename "./A/a.txt" B.txt」 ですね。まあ、Windowsは英字の大文字小文字を区別しないので、これが原因でエラーにはなりませんが。 ただ、大文字小文字に無頓着ということは、全角半角にも無頓着で間違えてたりしないでしょうか? Windowsでも全角半角は区別されますので、正確に同じように指定する必要があります。 コマンドプロンプトの上に、ファイルをドロップするとフルパスファイル名が得られるので、それをコピペするのが間違いないと思います。

n_i_g
質問者

補足

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

関連するQ&A

  • batファイルの相対パス

    batファイルの相対パス あるバッチが相対パスであるファイルを参照しています このバッチファイルを直接起動すれば、正しく参照できますが、 別のディレクトリにいる別のバッチファイルからcallされた場合、 呼び出し先の相対パスではなく、 呼び出し元の相対パスになってしまいファイルを参照できません。 この問題をスマートに解決する方法はありませんか? 例のchild.batからはfile.txtを参照できますが、 parent_1.bat経由の場合、ファイルが見つかりませんとなります。 child.bat の中で、「cd c:\dir_a」を書いて基点を変更すればとりあえずは行けそうですが、可能な限り絶対パスのベタ書きは避けたいです。 宜しくお願いします。 【例】 c:\ | +-dir_a | | | +-child.bat | | | +-file.txt | +-dir_b | | | +-parent_1.bat | +-dir_c | +-parent_2.bat ===== file.txt ===== test-test-test ===== file.txt ===== ===== child.bat ===== type ./file.txt pause ===== child.bat ===== ===== parent_1.bat ===== call c:\dir_a\child.bat ===== parent_1.bat =====

  • bat rename

    例) D:\A\aaa.logファイルをカレントディレクトリ配下の D:\A\B\yymmdd_aaa.logファイルへrename/移動を 同時に行いたいです。 yymmdd_を追加する方法がわかりません。 yymmddはdateでできるのでしょうか? #yymmddは日付で年月日の数字のみ入れたい

  • rename関数 できない

    どうもこんばんは ファイル名を変更したくて、多数のサイトを調べてました。 どのサイトも全く同じことを書いてて rename("b.txt","a.txt"); a.txt を b.txt に変更する場合の記述。 そのとおりにやったのですが、 「Warning: rename(b.txt,a.txt) [function.rename]: No such file or directory in C:\xampp\htdocs\test\test.php on line 13 」 とエラーが吐いてしまい、いくらやってもこうなってしまいます。 エラー文は該当ファイルかディレクトリが無いとかそういう類だと思いますが、原因がわかりません。 これで数時間費やしてしまいまして、ヒントや答えのレスをいただくころには、 copy関数で代用していると思いますが、どうしてrenameできないのか気になります・・ ヒントでもいいので、レスいただければと思います。 因みにwindowsXPでのテスト環境下(XAMPP)です。 PHP Version 5.2.5

    • ベストアンサー
    • PHP
  • batファイルでの一括削除

    知り合いに送ったファイルに不要な物が幾つかあるのが分かりました 知り合いはパソコン操作がそこまで得意でないのでこちらで作成したbatファイルを送り一括削除したいと思います 知り合いに送った圧縮ファイルがどこで展開されたのか分からないのですが 相対パスは分かるのでbatファイルでは相対パスで削除する事は出来るでしょうか? 削除したいファイルは全て名前がsendfilesと言う名前のディレクトリに入っており ディレクトリの中には数字3文字で001から154までほぼ連番で並んだディレクトリがあります このうち037と142の2つをディレクトリと中のファイルごと削除したいです 相対パスでの削除について分かりやすく書かれているURL等を教えて下さい

  • renameコマンドについて

    FTP先のファイル名を以下のように変更したいです。 rename *.txt *.csv これを実行すると 550 *.txt: The filename, directory name, or volume label syntax is incorrect. となってしまいます。 ワイルドカードは使用できると思っていたのですが、 何がいけないのでしょうか? ちなみに rename 111.txt 111.csv と指定した場合は問題なくできます。 複数のファイルを変換したいので困っています。 環境はWindows2000です。宜しくお願いします。

  • 別ディレクトリ内のファイルを文字列変数を使ってrenameしたいのですが・・・

     今、名前がすべてランダムで付けられたcsvファイル数十個を すべて共通の書式の名前に変更するプログラムを作成中なのですが、 最初の段階で躓いてしまいました。 どこの部分かというと、 rename("DATA\\str", "yyyymmdd.csv"); この部分です。 以下私の書いてみたソースです。 int main(void) { int result; char str[20]; FILE *li_fp; li_fp = fopen("filelist.txt", "r"); memset(liststr, '\0', 20); fgets(liststr, 20, li_fp); result = rename("DATA\\str", "yyyymmdd.csv"); if (result != 0) { printf("名前の変更に失敗しました。\n"); perror("rename error"); } fclose(li_fp); } カレントディレクトリ内に、 filelist.txtとDATAというフォルダがあります。 filelist.txtには、DATAの中にあるcsvデータの名前が列挙されています。 DATAフォルダの中には、filelist.txtで列挙されたものの 実際のデータが入ってます。 filelist.txtの中身はこんなかんじです。 aabbcc.csv ddeeff.csv gghhii.csv  ・  ・  ・ 実際はもっとぐちゃぐちゃしたファイル名ですが、わかりやすいように 簡略化して書かせていただきます。 fgetsで一行目の aabbcc.csvをstrに取り込み、rename関数を使い、DATAフォルダの中の aabbcc.csvをyyyymmdd.csvに変更したいのですが、 実行結果は 名前の変更に失敗しました。 rename error: NO such file or directory と表示されてしまいます。 絶対パスでの指定方法も試してみましたが、同じ結果でした。 この部分がわからないと先を作っても意味がないので困っております。 よろしくお願いいたします。

  • タスクスケジューラでbatファイルを動かしたい

    Windows10とWindows7を使っています Biosにタイマー機能がないノートPC(Windows7)を、遠隔PC(Windows10)からタスクスケジューラを使ってWakeOnLanで起動させることにより、タイマー起動のようなことをしようかと思い立ちました。 http://plaza.rakuten.co.jp/mscrtf/diary/201210120000/ こことほぼここと同じことを考え ・コマンドでMagicPacketを送れるソフト(MagicSend)を探しだし ・MagicSendと同一ディレクトリ内にWakeOnLanのbatファイルを作って配置し ・そのWakeOnLanのbatファイルをタスクスケジューラに登録 したところ、起動に失敗しました。 ・WakeOnLanのbatファイルを手動で動かすと起動する ・WakeOnLanのbatファイルにストップウォッチソフト起動コマンドを追加してみたところ、手動ではWakOnLanもストップウォッチも起動するが、タスクスケジューラでは起動しない ところから、タスクスケジューラがバッチファイルの実行に失敗しているのではないかと思います ここから先がわからなくなりました この場合、どこを疑うべきでしょうか? Windows10のタスクスケジューラはWindows7とは違う点があるとか、タスクスケジューラでbatファイルを動かす場合はbatファイル内に記述するコマンドのカレントディレクトリの位置に気をつけなくてはならない(絶対パスを指定すべし?)とか、その他ありますか?

  • コマンドプロンプトでファイル読み込み

    For文を使って、パラメータファイルから値を読み込みたいのですが、 "C:\Documents and Settings\~"等(パスにスペースが含まれる場合)に置かれた場合、 ファイルを読み込んでくれず困っております。 ()内のファイル指定で、""(ダブルクォーテーション) や'(シングルクォーテーション)で囲むこともしてみましたが、ダメでした。。 どう指定すればよいのかご教授下さい。 よろしくお願いいたします。 【パラメータファイル(tmp.txt)】 ABC=12345 【バッチファイル(test.bat)】 for /F "delims== tokens=1,2" %%A in (D:\tmp.txt) do if %%A==ABC set value_1=%%B echo %value_1% pause

  • ショートカットファイルの動きについて

    ショートカットファイルの動きについて教えてほしいです。 仮にカレントディレクトリをログに出力するバッチファイル(output.batとする)があるとします。 output.batへのショートカットを作成し、ショートカットの「リンク先」に以下を指定しました(相対パスがとれるということで調べました) %windir%\system32\cmd.exe /c cd /d .\ & start (output.batのパス) これによりショートカットの保存されているディレクトリがカレントディレクトリとなり、Aがショートカットのパスをログに出力できました。 このショートカットをタスクバーのツールバーにショートカットのフォルダを新規追加しました。 そしてツールバーからショートカットを開くとc:\windows\system32がログに出力されました。 ショートカット自体は同じものなのにツールバーだと思い通りの動きになりませんでした。 ツールバーでの利用をしたいため、この動きを想定通りにするためにはどのようにすればよいでしょうか?

  • batファイルについて

    C:\work\a\a.txt C:\work\a\b.txt C:\work\a\c.txt C:\work\b\a.txt C:\work\b\d.txt C:\work\c\a.txt C:\work\d\a.txt C:\work\d\e.txt C:\work\d\f.txt 上記のようなファイルがあったとき 各ディレクトリのa.txtだけを残したいのですが (他のファイルは全部削除) どのようなbatファイルを作成すればよろしいのでしょうか。 すみませんが方法がありましたら教えてください。

専門家に質問してみよう