使用cmd删除文件名前缀

16 浏览
0 Comments

使用cmd删除文件名前缀

我有一个文件夹里有成千上万个文件,其中大多数文件的名称都有类似于这样的前缀:NNNN_*.jpg

例如3453_dfgdhfdgh.jpg1000_dfgdhfdgh.jpg5463_dfgdhfdgh.jpg等等。

我该如何使用CMD命令将所有存在此类前缀的文件的前缀删除并重命名?

0
0 Comments

从上述内容中可以总结出以下问题和解决方法:

问题:如何使用cmd去除文件名前缀?

原因:可能需要先检查文件名前缀是否始终为四位数字,如果是,则可以直接去除前缀。如果不是,则需要使用两个辅助函数进行检查。

解决方法:根据文件名前缀是否为四位数字进行不同的处理。

具体的解决方法如下:

1. 首先,如果文件名前缀始终为四位数字,则可以使用以下代码进行去除前缀的操作:

setlocal enabledelayedexpansion
for %%F in (*) do (
  set "FN=%%F"
  set "FN=!FN:~5!"
  ren "%%F" "!FN!"
)
goto :eof

2. 如果需要先检查文件名前缀是否为四位数字,则需要使用两个辅助函数进行检查。具体代码如下:

:IsDigit
set Digit=
if "%~1" GEQ "0" if "%~1" LEQ "9" set Digit=1
goto :eof
:IsNumber
setlocal
set "File=%~1"
set Number=
call :IsDigit "%File:~0,1%"
set Digit1=%Digit%
call :IsDigit "%File:~1,1%"
set Digit2=%Digit%
call :IsDigit "%File:~2,1%"
set Digit3=%Digit%
call :IsDigit "%File:~3,1%"
set Digit4=%Digit%
if "%Digit1%%Digit2%%Digit3%%Digit4%"=="1111" set Number=1
endlocal & set Number=%Number%
goto :eof

3. 根据文件名前缀是否为四位数字进行不同的处理。具体代码如下:

setlocal enabledelayedexpansion
for %%F in (*) do (
  set "FN=%%F"
  call :IsNumber "!FN!"
  if defined Number if "!FN:~4,1!"=="_" (
    set "FN=!FN:~5!"
    ren "%%F" "!FN!"
  )
)
goto :eof

需要注意的是,以上代码中存在一个问题,即1000_a.jpg文件会被1001_a.jpg文件覆盖。需要根据具体需求对重复文件进行处理,例如覆盖、添加唯一计数器、忽略等。

0