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

[文件操作] 批处理如何修改带特点符号文件名?

想修改特定文件夹下,特定文件名称,如:
E:盘里面文件  5862#332.pdf   需要把#和后面数字去掉重命名为 5862.pdf
建立如下批处理命令,出现个问题,第一次运行后能正常命名,但是如果后面重复命名后,就会不停的在后面加.pdf运行一次加一次变成5862.pdf.pdf.pdf
请问下如下命令怎么改下,如果文件名称中没有#这个符号就不从新命名
  1. cd /d E:\8.25
  2. setlocal enabledelayedexpansion
  3. for /f "delims=" %%i in ('dir /b /a-d *.pdf') do (
  4.     for /f "tokens=1 delims=-#" %%a in ("%%i") do (
  5.         ren "%%i" "%%a "
  6.     )
  7. )
复制代码

将重命名后的文件移到其它路径,比如在当前文件夹内再建个文件夹放置。
fzp070 发表于 2022-8-25 22:25

不会批处理命令,请问下,改名移动到另外指定文件夹,怎么改加一段什么命令比如,移动到E】E:\test 文件夹下

TOP

本帖最后由 jcrh_bf 于 2022-8-25 23:20 编辑

回复 3# idwma
cd /d E:\8.25
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 "
    )
)
替换后文件后缀名也取消了,.pdf没有了
cd /d E:\8.25
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"
    )
)

ren 后面加了个%%~xi  可以了,谢谢

TOP

回复 6# fzp070
谢谢上面的问题好了,又遇到个问题,如果有改名后有相同文件名的文件他就不自动命名了
能不能把 相同文件名替换掉或者  如果有相同文件名后面加~1  ~2  ~3  这种

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

本帖最后由 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

本帖最后由 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 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

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

TOP

回复 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

回复 10# qixiaobin0715
你好帮看看,把你这个代码套到剪切移动 如有重名文件+  ~1  ~2  ~3 怎么没有反应,帮看看那步有问题,谢谢
@echo off

setlocal enabledelayedexpansion
for /f "delims=" %%i in ('dir /b /a-d *.pdf') do (
    for /f "delims=" %%i in ("%%i") do (
    if not exist "%%i.pdf" (
        move "%%i" E:\2022年\8月\27日\"%%i"
    ) else (
        set n=1
        for /f "delims=" %%k in ('dir /b /a-d %%i~*.pdf 2^>nul^|findstr /ber "%%i~[0-9]*\.pdf"') do set /a n+=1
        move "%%i#%%j" E:\2022年\8月\27日\"%%i~!n!.pdf"
    )
))

pause

TOP

本帖最后由 jcrh_bf 于 2022-8-28 23:50 编辑

回复 29# qixiaobin0715

就是把任一文件按规则命名文件(比如文件中有#号),留#号前半部分剪切到另外一个文件夹,如果目标文件夹有相同名称的文件自动再后面按顺序加(1) (2)(3)......

现在修改了几次,如果重复一次加~1没问题,后面继续就没法加~2  3  4了,应该只是识别到第一个条件反复吧~1替换了,
应该    for /f "delims=" %%k in ('dir /b /a-d %%i~*.pdf 2^>nul^|findstr /ber "%%i~[0-9]*\.pdf"') do set /a n+=1,定位到目标位置,这句现在语法有问题是不是没有定位到目标位置

@echo off

setlocal enabledelayedexpansion
for /f "tokens=1* delims=." %%i in ('dir /b /a-d *.pdf') do (

    if not exist "E:\2022年\8月\27日\%%i.pdf" (
        move "%%i.%%j" E:\2022年\8月\27日
    ) else (
        set n=1
        for /f "delims=" %%k in ('dir /b /a-d %%i~*.pdf 2^>nul^|findstr /ber "%%i~[0-9]*\.pdf"') do set /a n+=1
        move "%%i.%%j" E:\2022年\8月\27日\"%%i~!n!.pdf"
    )
)

pause

TOP

本帖最后由 jcrh_bf 于 2022-8-28 22:47 编辑

回复 30# fzp070
这样改后,显示移动文件成功,第一次没有重复的移动成功,后面有重复的,源文件夹文件不见了,但是目标文件夹里面没有文件
@echo off

setlocal enabledelayedexpansion
for /f "delims=" %%i in ('dir /b /a-d *.pdf') do (
    for /f "delims=" %%i in ("%%i") do (
    if not exist "%%i.pdf" (
        move "%%i" E:\2022年\8月\27日
    ) else (
        set n=1
        for /f "delims=" %%k in ('dir /b /a-d %%i~*.pdf 2^>nul^|findstr /ber "%%i~[0-9]*\.pdf"') do set /a n+=1
        move "%%i#%%j" E:\2022年\8月\27日
    )
))

pause

TOP

回复 32# WHY
应该改成(n)就没有问题吧

TOP

回复 37# qixiaobin0715
你好,现在的问题应该下面这段代码用于剪切操作,有问题,不能识别~1  ~2  ……,这些,只有当有和源文件名一样的才重命名为~1,当有~的文件后,没法识别道继续+1变为~2,直接就把~1替换了
  ) else (
        set n=1
        for /f "delims=" %%k in ('dir /b /a-d %%i~*.pdf 2^>nul^|findstr /ber "%%i~[0-9]*\.pdf"') do set /a n+=1
        move "%%i#%%j" E:\2022年\8月\27日

TOP

返回列表