windows - 如果名称包含批处理,则重命名文件

标签 windows file batch-file

我目前正在尝试根据名称的内容重命名一些文件。 我有 4 种不同的可能性:

  • 文件名包含“raw.footage”
  • 文件名包含“resized.1080”
  • 文件名包含“resized.720”
  • 文件名包含“converted.avi”

我正在尝试根据文件的名称重命名这些文件。 raw.footage 应该重命名为 raw,resized.1080 到 1080 等。

如果可能的话,我希望每个可能的名称只有一个 .bat 脚本/文件,而不是四个。

这是我到目前为止所做的:

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
)

虽然使用第一个 block ,它只包含 raw.footage 的重命名,但它自己可以正常工作,添加第二个 block 只会导致命令行在 block 之间跳转,但文件没有任何反应。

最佳答案

@ECHO OFF
SETLOCAL
SET "completepath=."
SET "subfor="
FOR /R %completepath% %%G IN (*.mp4) DO FOR %%s IN (
     raw.footage raw resized.1080 1080 resized.720 720 converted.avi converted) DO (
 SET mp4path=%%~dpG
 IF DEFINED subfor (call :process "%%~nG" "%%s") ELSE (SET "subfor=%%s")
 )
)
GOTO :EOF
:process
SET name=%~1
CALL SET chkname=%%name:%subfor%=%~2%%
IF NOT "%name%"=="%chkname%" ECHO REN "%mp4path%%name%.mp4" "%chkname%.mp4"
SET "subfor="
GOTO :eof

转换字符串(从到)只是成对插入...完成。简单。


针对新要求进行了修订

@ECHO OFF
SETLOCAL
SET "completepath=."
SET "subfor="
FOR /R %completepath% %%G IN (*.mp4 *.wmv) DO FOR %%s IN (
     raw.footage raw resized.1080 1080 resized.720 720 converted.avi converted) DO (
 SET mp4path=%%~dpG
 IF DEFINED subfor (call :process "%%~nG" "%%s" "%%~xG") ELSE (SET "subfor=%%s")
 )
)
GOTO :EOF
:process
SET name=%~1
CALL SET chkname=%%name:%subfor%=%~2%%
IF NOT "%name%"=="%chkname%" ECHO REN "%mp4path%%name%%~3" "%chkname%%~3"
SET "subfor="
GOTO :eof

关于windows - 如果名称包含批处理,则重命名文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17504516/

相关文章:

c - 用于键盘映射的后台c程序

windows - 如何在 Ubuntu 中编译 Windows 二进制文件?

windows - 批处理文件 : assign decimal value to variable

windows - 将带有开关的参数传递给批处理文件

windows - 单击批处理文件与将文件夹拖到批处理文件上时,循环目录搜索结果的批处理文件会发生变化

windows - 有没有办法让git在windows上打开密码提示框?

python - 如何在 Windows 7 上升级我的 Python 版本而无需重新安装所有软件包?

python - 高效处理文本文件中的数据

file - dsofile C# API/NTFS 自定义文件属性

java - Struts2或spring打开WEB-inf中的文件