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

ある複数フォルダに格納されているファイルを、フォルダ名に
リネームするバッチファイルを作成したいです。

●リネーム前
C:\リネーム\あいうえお\data.txt
C:\リネーム\かきくけこ\data.txt
C:\リネーム\さしすせそ\data1.txt
C:\リネーム\さしすせそ\data2.txt
C:\リネーム\たちつてと\data1.log
C:\リネーム\たちつてと\data2.log
C:\リネーム\なにぬねの\data.log


●リネーム後
C:\リネーム\あいうえお\あいうえお.txt
C:\リネーム\かきくけこ\かきくけこ.txt
C:\リネーム\さしすせそ\さしすせそ 1.txt
C:\リネーム\さしすせそ\さしすせそ 2.txt
C:\リネーム\たちつてと\たちつてと 1.log
C:\リネーム\たちつてと\たちつてと 2.log
C:\リネーム\なにぬねの\なにぬねの.log

知識がなく申し訳ありませんが、お助け願います。。

pause
cd c:\リネーム
dir /s /b C:\リネーム\ > file.tmp
for /f "delims=" %%F in (file.tmp) do (
for /f "delims=\ tokens=3" %%D in ("%%F") do (
REN %%F C:\リネーム\%%D\%%D%%~xF
))
del file.tmp
pause

どうもうまくいきません。。。

A 回答 (2件)

ファイル名をディレクトリ名にあわせるならディレクトリ分けする意味がないような・・・



いわゆるbatではなくwsh(vbs)であればもっとやりやすいと思います。

なお、
hoge1.txt
fuga1.txt
など存在すると競合しますが、絶対にでてこない保証があるという前提でいいのでしょうか?
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
そうなんです、ディレクトリ分けする意味ないんです。。

wshですね、勉強してみます><

競合するとは、複数のディレクトリ内に同じファイル名が存在するとという意味でしょうか?

お礼日時:2014/06/11 17:14

ざっと書いてみました


例外処理やエラー処理など一切省いていますので
想定外のファイル名などついている場合は、動かないかも

「rename.vbs」という名前で存して、マウスでダブルクリックしてみてください

'ここから
myFolder="C:\リネーム\"
set fs=CreateObject("Scripting.FileSystemObject")
set objFolder=fs.GetFolder(myFolder)
Set objRE = CreateObject("VBScript.RegExp")
For Each sf in objFolder.SubFolders
set objSubFolder=fs.GetFolder(sf)
For Each f in objSubFolder.Files
fname=fs.GetFileName(f)
bname=fs.GetBaseName(f)
ext=fs.GetExtensionName(f)
pname=fs.GetFileName(fs.GetParentFolderName(f))
objRE.pattern=".*?([\d]*?$)"
newname=objRE.replace(bname,pname&"$1") &"."&ext
msgbox myFolder&fname&" -> "& myFolder&newname
f.Name=newname
Next
Next
'ここまで
    • good
    • 0
この回答へのお礼

ありがとうございます!
無事動きました!!本当に感謝です><

お礼日時:2014/06/12 10:06

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