アプリ版:「スタンプのみでお礼する」機能のリリースについて

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

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 回答 (1件)

>しかし「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 でも書いておくといいです。
コマンドがどのように展開されてるか、や、エラーがあればわかります。
    • good
    • 1
この回答へのお礼

そこに囲むのでしたか!スペースの両端に囲んでいました。
修正もしてくださいましてありがとうございます。

お礼日時:2010/10/20 22:05

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

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


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