[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
回复 22# fzp070
怪事,我这后面的提示找不到文件

E:\8.26\已处理>setlocal enabledelayedexpansion

E:\8.26\已处理>set n=0

E:\8.26\已处理>for /F "delims=" %i in ('dir /b /a-d *?#?*.pdf') do (
set /a n+=1
for /F "tokens=1 delims=-#" %a in ("%i") do (ren "%i" "%a(!n!)%~xi" )
)

E:\8.26\已处理>(
set /a n+=1
for /F "tokens=1 delims=-#" %a in ("1055#222.pdf") do (ren "1055#222.pdf" "%a(!n!).pdf" )
)

E:\8.26\已处理>(ren "1055#222.pdf" "1055(!n!).pdf" )
存在一个重名文件,或是找不到文件。

E:\8.26\已处理>pause
请按任意键继续. . .
终止批处理操作吗(Y/N)?

TOP

回复 15# jcrh_bf

呃,在我这不能复现你的问题,我用15楼代码,一句没改,可以自动在后面添加(1)(2)(3)...

TOP

回复 18# qixiaobin0715
可以了哈,谢谢

TOP

本帖最后由 jcrh_bf 于 2022-8-26 17:30 编辑

回复 19# hfxiang
把这个批处理和需要处理的文件放一个文件夹下,能正常命名,但是加入一个定位文件夹这个命令怎么就无效了
文件名、目录名或卷标语法不正确。 提示的语法不正确,是不是定位那个输入错了
@echo off
cd/d E:\8.26\已处理
setlocal enabledelayedexpansion
for /f "delims=" %%a in ('dir /b /a-d *.pdf^|find "#"') do (
    for /f "tokens=1 delims=#" %%b in ("%%a") do (
        if exist "%%~b.pdf" (
                        set /a n=1
                        call :No_DupFile "%%~b"
                        ren "%%~a" "%%~b~!n!.pdf"
                ) else (
                        ren "%%~a" "%%~b.pdf"
                )
    )
)
endlocal
exit/b
:No_DupFile
if exist "%~1~!n!.pdf" (
    set /a n+=1
    goto :No_DupFile
)
pause

放在文件夹外,点击批处理命令没有反应

TOP

回复 16# jcrh_bf
  1. @echo off
  2. for /f "delims=" %%i in ('dir /b /a-d *?#?*.pdf') do (
  3.     for /f "tokens=1 delims=-#" %%a in ("%%i") do (
  4.         move "%%i" "%%a%%~xi"
  5.     )
  6. )
复制代码

TOP

回复 17# jcrh_bf
已修改,再试试。

TOP

本帖最后由 jcrh_bf 于 2022-8-26 16:14 编辑

回复 10# qixiaobin0715
你好,这个运行后提示  
系统找不到指定的文件。
能不能看看,如果改名后有重名文件,能不能删除重名文件再改名
setlocal enabledelayedexpansion
for /f "delims=" %%i in ('dir /b /a-d *?#?*.pdf') do (
    for /f "tokens=1 delims=-#" %%a in ("%%i") do (
        ren "%%i" "%%a%%~xi"
    )
)

TOP

本帖最后由 jcrh_bf 于 2022-8-26 16:25 编辑

回复 9# hfxiang
这个没问题哈,谢谢热心解答
能不能看看,如果改名后有重名文件,能不能删除重名文件  再改名  
setlocal enabledelayedexpansion
for /f "delims=" %%i in ('dir /b /a-d *?#?*.pdf') do (
    for /f "tokens=1 delims=-#" %%a in ("%%i") do (
        ren "%%i" "%%a%%~xi"
    )
)

TOP

回复 8# fzp070
setlocal enabledelayedexpansion
set n=0
for /f "delims=" %%i in ('dir /b /a-d *?#?*.pdf') do (
   set /a n+=1
    for /f "tokens=1 delims=-#" %%a in ("%%i") do (
        ren "%%i" "%%a(!n!)%%~xi"
    )
)
pause
第一个文件重复可以,但是第二个文件再有重复就提示有重名文件
存在一个重名文件,或是找不到文件。
就是说只能用一次 +1  后面没法继续 2   3  4

TOP

回复 11# hfxiang
退一步来说,即使没有特殊情况,也是需要的,第一个重名文件命名也是需要n值的。你那样,n=1就永远取不到。

TOP

回复 11# hfxiang
主要是防止出现类似这样的文件名:
abc#jh.pdf
abc~mn.pdf

TOP

回复 10# qixiaobin0715


    哦,抱歉,没注意 findstr /ber 使用正则表达式的严格探索,班门弄斧了

TOP

回复 10# qixiaobin0715


高手!!!学习的标杆!!!

纯探讨一下,如果把第7、8两行合并如下:
  1. for /f "delims=" %%k in ('dir /b /a-d %%i~*.pdf 2^>nul^|find /c ".pdf"') do set /a n=%%k+1
复制代码
是不是对于俺这样的新手来说更容易理解一点

TOP

本帖最后由 qixiaobin0715 于 2022-8-26 16:43 编辑

回复 7# jcrh_bf
一个不是太精确的代码:
重名文件必须严格按照楼主提供的规则命名,即顺序号是~1、~2、~3...等(包括已有的,已经命名过的重名文件)构成,中间不能有断档(比如存在~1,~3,而没有~2)
代码保存为ANSI编码:
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "tokens=1* delims=#" %%i in ('dir /b /a-d *#*.pdf') do (
  4.     if not exist "%%i.pdf" (
  5.         ren "%%i#%%j" "%%i.pdf"
  6.     ) else (
  7.         set n=1
  8.         for /f "delims=" %%k in ('dir /b /a-d %%i~*.pdf 2^>nul^|findstr /ber "%%i~[0-9]*\.pdf"') do set /a n+=1
  9.         ren "%%i#%%j" "%%i~!n!.pdf"
  10.     )
  11. )
  12. pause
复制代码
注意代码未经测试。

TOP

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "delims=" %%a in ('dir /b /a-d *.pdf^|find "#"') do (
  4.     for /f "tokens=1 delims=#" %%b in ("%%a") do (
  5.         if exist "%%~b.pdf" (
  6. set /a n=1
  7. call :No_DupFile "%%~b"
  8. ren "%%~a" "%%~b~!n!.pdf"
  9. ) else (
  10. ren "%%~a" "%%~b.pdf"
  11. )
  12.     )
  13. )
  14. endlocal
  15. exit/b
  16. :No_DupFile
  17. if exist "%~1~!n!.pdf" (
  18.     set /a n+=1
  19.     goto :No_DupFile
  20. )
复制代码

TOP

返回列表