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

[文件操作] 批处理调整文件名,目录下所有文件的名字按照4,1,2,3的顺序进行更改,并以此类推

求助高手
有N个文件夹,每个文件夹里面有很多张JPG格式的图片文件,需要将第一个文件命名为0004、第二个文件命名为0001、第三个文件命名为0002、第四个文件命名为0003,第五个文件命名为0008、第六个文件命名为0005、第七个文件命名为0006、第八个文件命名为0007、第九个文件命名为0012,依此类推 请用批处理编写


说明:一个A3的纸 有四面   扫描后  第4页和第1页在一起   第2页和第3页在一起   分割开后的顺序就是  第一文件是第4页  第二个文件是第1页  第三个文件是第2页  第二个文件是第3页
做这个程序的目的是把顺序调整正确

示例:
原文件名   命名后
1                4
2                1
3                2
4                3
5                8
6                5
7                6
8                7
9                12
10               9
11               10
12               11
13               16
.                   .
.                   .
.                   .
.                   .
.                   .



感谢 感谢
非常好的论坛

不是你这有啥规律啊

TOP

回复 2# jyswjjgdwtdtj
一个A3的纸 有四面   扫描后  第4页和第1页在一起   第2页和第3页在一起   分割开后的顺序就是  第一文件是第4页  第二个文件是第1页  第三个文件是第2页  第二个文件是第3页
做这个程序的目的是把顺序调整正确
非常好的论坛

TOP

ChatGPT写的代码:
@echo off
setlocal EnableDelayedExpansion

set /a i=0
for %%f in (*.jpg) do (
    set /a i+=1
    if !i! == 1 (
        ren "%%f" "0004.jpg"
    ) else if !i! == 2 (
        ren "%%f" "0001.jpg"
    ) else if !i! == 3 (
        ren "%%f" "0002.jpg"
    ) else if !i! == 4 (
        ren "%%f" "0003.jpg"
    )
)

echo All files have been renamed.
非常好的论坛

TOP

  1. @echo off
  2. rem 假设每个文件夹内图片数量均不超过100
  3. setlocal enabledelayedexpansion
  4. for /f "delims=" %%i in ('dir /b /ad') do (
  5. pushd "%%i"
  6. for /l %%l in (1,1,100) do (
  7. if exist %%l.jpg (
  8. set /a "m=(%%l+4)%%4"
  9. if "!m!" equ "1" (
  10. set /a n=%%l+3
  11. ) else (
  12. set /a n=%%l-1
  13. )
  14. ren %%l.jpg !n!.jpg1
  15. )
  16. )
  17. ren *.jpg1 *.jpg
  18. popd
  19. )
  20. endlocal
  21. pause
复制代码

这样行吗?使用前先备份
1

评分人数

bat小白,请多指教!谢谢!

TOP

回复 5# 77七

运行了  没有反应啊
文件夹内的文件不止100个  1000个以内
非常好的论坛

TOP

本帖最后由 buyiyang 于 2023-3-1 00:26 编辑

回复 6# 001011


    试试这个,先备份测试
  1. setlocal enabledelayedexpansion
  2. for /d %%i in (*) do (
  3. pushd "%%i"
  4. set /a n=10000
  5. for %%a in (*.jpg) do (
  6. set /a n+=1
  7. set /a m=n%%4
  8. if !m! equ 1 (set /a s=n+3) else (
  9. set /a s=n-1
  10. )
  11. ren "%%a" "!s:~1!.jpg"
  12. )
  13. popd
  14. )
  15. pause
复制代码
1

评分人数

    • 001011: 感谢回复,您这个代码运行后显示:存在一个 ...技术 + 1

TOP

回复 6# 001011

我知道问题了,是0001 不是1
  1. @echo off
  2. rem 假设每个文件夹内图片数量均不超过1000
  3. setlocal enabledelayedexpansion
  4. for /f "delims=" %%i in ('dir /b /ad') do (
  5. pushd "%%i"
  6. for /l %%l in (1,1,1000) do (
  7. set k=000%%l
  8. set k=!k:~-4!
  9. if exist !k!.jpg (
  10. set /a "m=(%%l+4)%%4"
  11. if "!m!" equ "1" (
  12. set /a "n=%%l+3"
  13. ) else (
  14. set /a "n=%%l-1"
  15. )
  16. set n=000!n!
  17. echo ren !k!.jpg !n:~-4!.jpg1
  18. ren "!k!.jpg" "!n:~-4!.jpg1"
  19. )
  20. )
  21. ren *.jpg1 *.jpg
  22. popd
  23. )
  24. endlocal
  25. pause
复制代码


再试试
1

评分人数

    • 001011: 非常感谢 效果杠杠滴技术 + 1
bat小白,请多指教!谢谢!

TOP

本帖最后由 qixiaobin0715 于 2023-3-2 08:10 编辑
  1. @echo off
  2. set /a #1=3,#2=#3=#0=-1
  3. setlocal enabledelayedexpansion
  4. for /f "delims=" %%i in ('dir /b /s /a-d *.jpg') do (
  5.     set /a n=%%~ni%%4
  6.     set /a m=%%~ni+#!n!
  7.     set m=000!m!
  8.     ren "%%i" "!m:~-4!%%~xi"
  9. )
  10. pause
复制代码

TOP

回复 9# qixiaobin0715

运行没有效果  不过还是感谢
非常好的论坛

TOP

借鉴下7楼和9楼两位大佬的写法,综合一下
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "delims=" %%a in ('dir /b /s /a-d *.jpg') do (
  4. for /f "tokens=* delims=0" %%b in ("%%~na") do (
  5. set /a "p=%%b%%4"
  6. if !p! equ 1 (
  7. set /a "n=10000+%%b+3"
  8. ) else (
  9. set /a "n=10000+%%b-1"
  10. )
  11. ren "%%a" !n:~-4!.jpg1
  12. )
  13. )
  14. )
  15. endlocal
  16. for /r %%a in (*.jpg1) do (
  17. ren "%%a" "%%~na.jpg"
  18. )
  19. pause
复制代码
bat小白,请多指教!谢谢!

TOP

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "delims=" %%a in ('dir /b /s /a-d *.jpg') do (
  4. set "m=1%%~na"
  5. set /a "p=!m!%%4"
  6. if !p! equ 1 (
  7. set /a "n=!m!+3"
  8. ) else (
  9. set /a "n=!m!-1"
  10. )
  11. ren "%%a" !n:~-4!.jpg1
  12. )
  13. endlocal
  14. for /r %%a in (*.jpg1) do (
  15. ren "%%a" "%%~na.jpg"
  16. )
  17. pause
复制代码
不去0了,前面添加一个1
bat小白,请多指教!谢谢!

TOP

回复 10# 001011
仔细看了看,原来如此。顶楼表达有问题,这样就不会使人误会了:
原文件名   命名后
0001                00004
0002                00001
0003                00002
0004                00003
0005                00008
0006                00005
....
重命名后,前面多加一个0,防止命名过程中出现重名文件,我想应当不会有大碍。
代码中使用了伪循环(第2个for),作用是去掉原文件名中的位于最前面的若干0,便于后面的计算:
  1. @echo off
  2. set /a #1=3,#2=#3=#0=-1
  3. setlocal enabledelayedexpansion
  4. for /f "delims=" %%i in ('dir /b /s /a-d *.jpg') do (
  5.     for /f "tokens=* delims=0" %%j in ("%%~ni") do (
  6.         set /a n=%%j%%4
  7.         set /a m=%%j+#!n!
  8.         set m=0000!m!
  9.         ren "%%i" "!m:~-5!%%~xi"
  10.     )
  11. )
  12. pause
复制代码

TOP

  1. @echo off
  2. setlocal EnableDelayedExpansion
  3. for /l %%a in (1,1,10) do (
  4. call :c %%a
  5. )
  6. pause
  7. exit
  8. :c
  9. set/a n1=%1
  10. set/a r = %1 %% 4
  11. if %r% equ 1 (
  12. set /a n2 = n1 + 3
  13. ) else (
  14. set /a n2 = n1 - 1
  15. )
  16. set n1 = 0000%n1%
  17. set n2 = 0000%n2%
  18. set n1 = %n1:~4%
  19. set n2 = %n2:~4%
  20. echo   %n1%  n%n2%
  21. goto :eof
复制代码
原文件名是什么样的?
如果前后文件名都是相同位数,会出现同名情况,怎么处理?

TOP

LZ引诸位玩了一把f(4n)的函数游戏,
但若对图片内容与更名序号的对应关系无所谓,
其实与按自然数序号更名后的结果并无实质区别
因为系统自动排序后就又重归自然数队形了...

更名结果   系统自动打回原形
0004.jpg  0001.jpg
0001.jpg  0002.jpg
0002.jpg  0003.jpg
0003.jpg  0004.jpg

0008.jpg  0005.jpg
0005.jpg  0006.jpg
0006.jpg  0007.jpg
0007.jpg  0008.jpg

TOP

返回列表