【问题标题】:Rename files using cmd and allow duplicates file name使用 cmd 重命名文件并允许重复文件名
【发布时间】:2015-02-05 23:35:30
【问题描述】:

我的批处理文件包含以下命令。

REN "H:\April2012\A04\mr_sudheendra_holla_vaderhobli.pdf.1335780379203.ver1" "mr_sudheendra_holla_vaderhobli.pdf"

但如果存在重复文件,该命令将不会执行。如果有重复,我希望我的命令将文件名重命名为 *(1).pdf*(2).pdf 等。我该怎么做?

【问题讨论】:

  • @DavidPostill - 绝对不是重复的。 REN 与 COPY 不同,而且唯一答案中使用的技术不适用于此问题。
  • @dbenham 不是完全重复,但重命名是复制后删除...所以 dup 答案是一个起点...
  • @DavidPostill - 不,“dup”答案不是起点,因为它假定目标文件夹一开始是空的。如果应用于重命名,很容易发生名称冲突。

标签: batch-file cmd duplicates rename


【解决方案1】:

renDup.bat

@echo off
setlocal disableDelayedExpansion
ren %1 %2 2>nul && echo %1 --^> "%~n2(%max%)%~x2"|| call :renDup %1 %2
exit /b

:renDup
set max=0
for /f "delims=" %%F in (
  'dir /b "%~dp1%~n2(*)%~x2" 2^>nul ^| findstr /ri "([1-9][0-9]*)\%~x2$"'
) do call :getMax "%%~nF"
set /a max+=1
ren %1 "%~n2(%max%)%~x2" && echo %1 --^> "%~n2(%max%)%~x2"
exit /b

:getMax
set "name=%~1"
set "name=%name:~0,-1%"
for %%N in ("%name:(=.%") do set num=%%~xN
set /a num=%num:~1%
if %num% gtr %max% set "max=%num%"
exit /b


用法:

renDup "H:\April2012\A04\mr_sudheendra_holla_vaderhobli.pdf.1335780379203.ver1" "mr_sudheendra_holla_vaderhobli.pdf"

【讨论】:

  • 这很好用,但是,我更喜欢 filename_012 而不是 filename(12) 并且无法相应地调整您的脚本。我想我想通了,除了这个:("%name:(=.%")。请你帮助我好吗? :)
猜你喜欢
  • 2015-06-05
  • 2017-07-25
  • 2021-04-19
  • 1970-01-01
  • 1970-01-01
  • 2014-07-17
  • 1970-01-01
  • 2012-05-04
  • 2021-02-17
相关资源
最近更新 更多