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

[文件操作] [已解决]批处理文件已存在则添加序号

各位大佬大家好:

以下是小弟写的最简单的批处理命令:将AAA文件夹里面的内容剪切到BBB文件夹
move C:\Users\dmns25163\Desktop\AAA\*.* C:\Users\dmns25163\Desktop\BBB

当两个文件名相同的时候希望能有些区分,目前想到的届时增加尾缀。
例:新建 Microsoft Access 数据库→新建 Microsoft Access 数据库1→新建 Microsoft Access 数据库2(以此类推)

希望大神给与指导。
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

回复 27# 77七


非常感谢指导,测试OK

TOP

回复 30# aloha20200628


   

谢谢老师指点!您的意思我大概理解了,既然无法立即退出for /l 循环,就提高批处理代码效率,使for /l 尽快退出。
bat小白,请多指教!谢谢!

TOP


代码已作如下订正。看那些纯P老玩家已经不深究 for/L 能否立即退出循环的问题了,切磋的只是如何“尽快”退出的“妙计高招”。for/L 的循环量一旦过万,钝感即现,上十万就相当吃力了... 好在批处理脚本勉为其难的企业级(大数量规模)应用,都有更高效的成熟解决方案,仅脚本而言,前有vbs/jscript/mshta/awk/...,后有powershell/python/... 着实省去了以往纯P非要在“螺蛳壳里作道场”的艰难曲折了...
  1. ::题型一》采用开关变量+if 语块包裹循环体 不用goto》耗时约2s
  2. set "#break="
  3. for /L %%n in (1,1,320000) do if not defined #break (set "n=%%n" &set #break=1)
  4. echo,%n%
  5. pause &exit/b
  6. ::题型二》采用 goto+if 语块包裹循环体》耗时1.6s
  7. for /L %%n in (1,1,320000) do if %%n equ 1 (set "n=%%n" &goto[outLoop])
  8. :[outLoop]
  9. echo,%n%
  10. pause &exit/b
  11. ::题型三》采用 goto,不采用 if 语块包裹循环体》耗时约1s
  12. for /L %%n in (1,1,320000) do (set "n=%%n" &goto[outLoop])
  13. :[outLoop]
  14. echo,%n%
  15. pause &exit/b
复制代码

TOP

回复 28# qixiaobin0715


   

谢谢大佬指点!大佬的代码更加直观易读。
bat小白,请多指教!谢谢!

TOP

回复 27# 77七
后面代码这样即可:
  1. :1
  2. set /a n+=1
  3. if exist "%folder2%\%~n1(%n%)%~x1" goto :1
  4. move "%~1" "%folder2%\%~n1(%n%)%~x1"
复制代码

TOP

回复 19# adfs945


   既然你需要如此频繁使用,将标签部分修改为 set /a +goto 好了,避免 for /l 影响效率,和for /l 数字固定问题。
  1. @echo off
  2. set INTERVAL=10
  3. :Again
  4. rem 批处理保存为ansi编码格式
  5. set "folder1=C:\Users\dmns25163\Desktop\AAA"
  6. set "folder2=C:\Users\dmns25163\Desktop\BBB"
  7. for %%a in ("%folder1%\*.*") do (
  8. if not exist "%folder2%\%%~nxa" (
  9. move "%%a" "%folder2%"
  10. ) else (
  11. set n=1
  12. call :1 "%%a"
  13. )
  14. )
  15. timeout %INTERVAL%
  16. goto Again
  17. pause
  18. exit
  19. :1
  20. set /a n+=1
  21. if not exist "%folder2%\%~n1(%n%)%~x1" (
  22. move "%~1" "%folder2%\%~n1(%n%)%~x1"
  23. exit /b
  24. ) else (
  25. goto :1
  26. )
复制代码
1

评分人数

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

TOP

回复 18# aloha20200628


   
谢谢老师指点!经过我粗略测试,发现三种方法,仍然没有避免for /l 产生不必要的迭代,细微的时间差别,可能是脚本自身的效率影响。
bat小白,请多指教!谢谢!

TOP

回复 18# aloha20200628


    是不是复制错了,为何一和二是4个0,三是5个0?
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 19# adfs945


timeout %INTERVAL%
goto Again
你把这两行挪到第17行下面试试
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 17# adfs945


    没事把所有后缀改动一下就行,像*.*
QQ 1980286392

TOP

回复 5# 447219071


    怎么有点像GPT的
QQ 1980286392

TOP

回复 4# Batcher


    感谢大佬指点,小白努力学习中。

TOP

回复 5# 447219071


    感谢指导,学习了。

TOP

回复 3# 77七

非常感谢指导,测试OK。
另外我又追加了循环10秒运行一回,但是失败了,请继续指导一下。
  1. @echo off
  2. set INTERVAL=10
  3. :Again
  4. rem 批处理保存为ansi编码格式
  5. set "folder1=C:\Users\dmns25163\Desktop\AAA"
  6. set "folder2=C:\Users\dmns25163\Desktop\BBB"
  7. for %%a in ("%folder1%\*.*") do (
  8. if not exist "%folder2%\%%~nxa" (
  9. move "%%a" "%folder2%"
  10. ) else (
  11. call :1
  12. )
  13. )
  14. pause
  15. exit
  16. :1
  17. for /l %%l in (2,1,200) do (
  18. if not exist "%folder2%\%%~na(%%l)%%~xa" (
  19. move "%%a" "%folder2%\%%~na(%%l)%%~xa"
  20. exit /b
  21. )
  22. )
  23.    
  24.     del try.txt
  25.     timeout %INTERVAL%
  26.    
  27.     goto Again  
复制代码

TOP

返回列表