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

[文件操作] 请问批处理如何根据部分文件名新建文件夹

[复制链接]
发表于 2023-3-9 14:25:25 | 显示全部楼层
回复 15# 惆怅而又凄凉
好吧 适用实际环境就好 关于遍历完才处理以至于脚本不能正常运行 可以这样试
相对字符截取效率会稍有提升 文件名如有特殊字符  就在FOR里开启延迟 否则没必要 影响效率
  1. @echo off
  2. for %%f in (*.zip) do (
  3.      echo 正在处理文件 %%f
  4.      for /f "tokens=1* delims=-" %%a in ("%%f") do (
  5.           set "FN=%%a-%%b"
  6.           set "FNR=%%b"
  7.           set "FNL=%%a"
  8.           echo name = %%a-%%b
  9.           setlocal enabledelayedexpansion
  10.           echo fn = !FN!
  11.           echo fnr = !FNR!
  12.           echo fnl = !FNL!
  13.           endlocal
  14.      )
  15. )

  16. pause
复制代码
发表于 2023-3-9 14:45:02 | 显示全部楼层
这个老问题多年来被议过多次,虽然老码农都明白,但至今还在不断折磨后来的求助者...
    类似如 dir /s/b/a-d ... 这个句式被用在 for...() 的括号内,仅适用于目标文件夹里的文件数属于小规模量级,比如几十到几百个文件项,一旦过千过万就可能开始上演“卡萨布兰卡”了,更别说是几十万上百万的量级了,除非求助者自己不稀罕时间。
    对大数据应用,其规模只能求助者自己把握(因具体系统硬件条件不同),还是要把 dir /s/b/a-d ... 移出 for...(), 先生成简报文件,再扔给 for...() 实时处理。
    例如:
    for /f "delims=" %%F in ('dir /s/b/a-d') do (...)
    改为:
    dir /s/b/a-d>"all.txt"
    for /f "delims=" %%F in (all.txt) do (...)
 楼主| 发表于 2023-3-9 21:14:52 | 显示全部楼层
本帖最后由 惆怅而又凄凉 于 2023-3-9 21:24 编辑

回复 17# aloha20200628


    因为是偶然性事件,毕竟电脑内存有64G,不慌。。。所以没有深究完美解决方案。

我目前的处理方式如下:
:aaa
start 1.bat
ping -n 1800 127.0.0.1 1>nul
goto aaa

不过你的指导让我深受启发,因为从长期应用角度来说,你的这种方式稳定性的确更加,至少多了个log了。
发表于 2023-3-10 09:10:28 | 显示全部楼层
回复 15# 惆怅而又凄凉


昨晚已经跑掉200万文件了,还剩900万。

如果1000多万个文件是按照某种分类方法放在不同的子文件夹下面,可以考虑让脚本并行处理。
 楼主| 发表于 2023-5-24 02:53:01 | 显示全部楼层
回复  惆怅而又凄凉



如果1000多万个文件是按照某种分类方法放在不同的子文件夹下面,可以考虑让脚本 ...
Batcher 发表于 2023-3-10 09:10



    当时有尝试过,如果文件不先分成多份,放在不同文件夹,直接并行的话效率会降低特别多,会有大量的找不到文件提示,也就是其中一个bat已经移动掉了,另一个还在识别这个。

而如果先移动到其他文件夹,也挺烦的不是嘛。

所以最后是用宏做了个延时启动,每10分钟自动开一个。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-18 22:30 , Processed in 0.018241 second(s), 7 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表