【问题标题】:Remove file name prefix with cmd使用 cmd 删除文件名前缀
【发布时间】:2013-02-28 12:46:38
【问题描述】:

我在一个文件夹中有数千个文件,其中大多数文件的名称前缀如下:NNNN_*.jpg

例如3453_dfgdhfdgh.jpg1000_dfgdhfdgh.jpg5463_dfgdhfdgh.jpg

如何使用 CMD 通过删除文件中的前缀来重命名所有文件,其中存在此​​类前缀?

【问题讨论】:

    标签: windows file batch-file cmd file-rename


    【解决方案1】:

    如果前面总是四位数字,那就比较简单了:

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

    但也许你需要先检查这是否真的是真的,在这种情况下我们需要两个辅助函数(在上面的部分下面添加它们):

    :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
    

    然后适应如下:

    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覆盖?
    • 嗯,是的。您应该大致了解如何处理重复项。
    • 对不起,它似乎不起作用。使用您的代码创建 .bat 文件
    • CMD 给我一个错误:'D:\photos\standard>( set "FN=2433_11e5b546228f8753773320f950651b29f.jpg" set "FN=!FN:~5,!" ren "2433_11e5b546228f8753773320f95 !FN!" ) 该名称的文件已存在'
    • 重命名前检查是否已经存在:stackoverflow.com/questions/3022176/…
    猜你喜欢
    • 2012-08-15
    • 2012-05-19
    • 2017-07-08
    • 2017-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-04
    相关资源
    最近更新 更多