1

現在、名前の内容に応じていくつかのファイルの名前を変更しようとしています。私には4つの異なる可能性があります:

  • ファイル名に「raw.footage」が含まれています
  • ファイル名に「resized.1080」が含まれています
  • ファイル名に「resized.720」が含まれています
  • ファイル名に「converted.avi」が含まれています

これらのファイルの名前に応じて、これらのファイルの名前を変更しようとしています。raw.footage の名前を raw に変更し、サイズを変更します。1080 から 1080 などにします。

可能であれば、可能な名前ごとに 4 つではなく、.bat スクリプト/ファイルを 1 つだけ使用したいと考えています。

これが私がこれまでに行ったことです:

FOR /R %completepath% %%G IN (*.mp4) DO call :process "%%~nG"
GOTO :EOF

:process
SET %name%=%~1
SET chkname=%name:*raw.footage=?%
IF "%chkname:~0,1%"=="?" (
@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
SET old=raw.footage
SET new=raw
for /f "tokens=*" %%f in ('dir /b *.mp4') do (
  SET newname=%%f
  SET newname=!newname:%old%=%new%!
  move "%%f" "!newname!"
)
) ELSE (
  GOTO 1080p
)

:1080p

FOR /R %completepath% %%G IN (*.mp4) DO call :process "%%~nG"
GOTO :EOF

:process
SET %name%=%~1
SET chkname=%name:*resized.1080=?%
IF "%chkname:~0,1%"=="?" (
@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
SET old=resized.1080
SET new=1080
for /f "tokens=*" %%f in ('dir /b *.mp4') do (
  SET newname=%%f
  SET newname=!newname:%old%=%new%!
  move "%%f" "!newname!"
)
) ELSE (
  GOTO 720
)

raw.footage の名前変更のみを含む最初のブロックを使用している間、それ自体は正常に動作しますが、2 番目のブロックを追加すると、コマンドラインがブロック間でジャンプするだけで、ファイルには何も起こりません。

4

3 に答える 3

1

ループの美しさからバッチが大好きです。

    @echo off &SETLOCAL ENABLEDELAYEDEXPANSION
    CD /d %startfolder%
    FOR %%i IN (
    raw.footage=生
    resized.1080=1080
    resized.720=720
    convert.avi=変換済み
        ) 行う (
    SET "旧名=!新名!"
    SET "newname=%%i"
    IF DEFINED 古い名前 (
        FOR /f "delims=" %%a IN ('dir /b/ad "*!oldname!*"') DO (
            SET "oldfilename=%%~a"
            CALL SET "newfilename=%%oldfilename:!oldname!=!newname!%%"
            ECHO REN "!oldfilename!" "!新しいファイル名!"
            )
        SET newname=&SET oldname=
        )
    )

これは視聴用であり、投票用ではないことに注意してください。

于 2013-07-06T17:14:09.663 に答える
1

同じものの別のバージョン (比較目的):

@echo off
setlocal EnableDelayedExpansion
set "completepath=."
FOR /R "%completepath%" %%G IN (*.mp4) DO (
   set "name=%%~nxG"
   for %%s in ("raw.footage=raw" "resized.1080=1080" "resized.720=720" "converted.avi=converted") do (
      set "chkname=!name:%%~s!"
      if "!name!" neq "!chkname!" ECHO REN "%%G" "!chkname!"
   )
)
于 2013-07-07T02:46:38.563 に答える