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

aaaa_bbbb.txt
cccccc_ddddd.jpg
のようなファイルが入ったフォルダの中身を、
aaaa.txt
cccccc_ddddd.jpg
にバッチで処理したいです。
ファイル名の何桁目かに必ず_が入るので、
ファイル名の先頭から最初の _ 以降(_を含み)の文字を削除したい。
ついでにtxtのみ処理したい。


他のページで以下のコードを見つけたのですが、これは_より前を削除するので
使えませんでした。

よろしくお願いします。


____________________________________________________
echo off
for /F "delims=" %%f in ('dir /b') do call :sub "%%f"
exit /b

:sub
set fname=%~1
set n=0

:loop
call set c=%%fname:~%n%,1%%
set /a n=n+1
if "%c%"=="" goto :EOF
if "%c%"=="_" goto break
goto loop
:break
call set newname=%%fname:~%n%%%
if "%newname%"=="" goto :EOF
if "%newname:~0,1%"=="." goto :EOF
ren "%fname%" "%newname%"
goto :EOF
____________________________________________________


ps.
コードの解読に挑戦して随分と調べましたが、恐らくこの2行の
意味が理解できたら改良できたのかもしれません。
意味を教えてもらえるとありがたいです。

=%%fname:~%n%,1%%
if "%newname:~0,1%"==

A 回答 (4件)

No.1 & 2です。



> 説明不足でした、_が2つ入っているファイルもあります。
> 2つ入っているとリネームされないみたいです。

こちらでは動作しています。(windows10 64bit)
aaa_bbb.txt → aaa.txt
ccc_ddd_eee.txt → ccc.txt

具体的にどのようなファイル名でしょうか?


ただNo.3さんの回答の方がシンプルで良いと思います。
行中の「echo」を削除してみてください。
    • good
    • 0

for /F "tokens=1* delims=_" %%F in ('dir /b *.txt') do echo move %%F_%%G %%F.txt


ってどうなるんだろう.
    • good
    • 0
この回答へのお礼

Tacosanさん
ありがとうございました。
動きませんでした。

お礼日時:2016/05/04 08:31

質問文の読み落としがありました、失礼。



> ついでにtxtのみ処理したい。

for /F "delims=" %%f in ('dir /b') do call :sub "%%f"
 ↓
for /F "delims=" %%f in ('dir /b *.txt') do call :sub "%%f"
    • good
    • 0
この回答へのお礼

siffon9さん
ありがとうございました。
説明不足でした、_が2つ入っているファイルもあります。
2つ入っているとリネームされないみたいです。
対策ありますでしょうか?

意味を教えて頂きありがとうございました。
ただ 分かった上でも今のスキルでは改良が難しいことも
わかりましたので、引き続き勉強します!

お礼日時:2016/05/04 08:31

call set newname=%%fname:~%n%%% 


の1行を、以下の4行に置き換えてみてください。

-----
set /a n=n-1
set ext=%~x1
call set newname=%%fname:~0,%n%%%
call set newname=%newname%%ext%
-----



> 意味を教えてもらえるとありがたいです。
> %%fname:~%n%,1%%

 変数fnameのn番目1文字を切り出す。

> "%newname:~0,1%"

 変数newnameの最初(0番目)の1文字を切り出す。
    • good
    • 1

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

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


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