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

[文件操作] 求助批处理文件整理,谢谢

一个文件夹内有多个文件各个格式都有;
1、命名有规律以人名开头如:张三的体检表.xls,张三的报告.doc,李四的体检表.xls,李四的报告.doc等
2、要求自动建立张三,李四的文件夹,并把现有的文件移动到相应的文件夹

谢谢;

自己做了没有头绪;不知道怎么取文件名的前二,三个字,建立文件夹,欢迎提供帮助,功德无量谢谢。

本帖最后由 dos大帝 于 2021-10-14 21:09 编辑
  1. @echo off & setLocal enableDelayedExpansion & cd /d "%~dp0"
  2. goto comment
  3. 代码作用局限:
  4.     不能移动隐藏文件或者系统文件
  5.     不会移动子目录下的文件
  6.     若之前已有目录, 会覆盖目录下重名文件
  7.     关键字有中文存在,所以该代码保存为bat文件时得用GKB编码
  8. :comment
  9. rem 要截取的关键字, 可继续往后添加, 包含这些字段的文件都会移动, 若同时包含有多个关键字, 则按下面填写的顺序移动
  10. set key=张三 李四 王麻子
  11. for %%i in (%key%) do (
  12.     md "%%i"
  13.     for /f "delims=" %%j in ('dir /b /a-d-s-h') do (
  14.         echo "%%~nj" | find "%%i" > nul && set is=0
  15.         if !is!==0 (
  16.             move "%%~nxj" "%%i"
  17.         )
  18.         set is=1
  19.     )
  20. )
  21. pause
复制代码

TOP

回复 7# dengao
最好能找出规律,批处理本身就是要处理规律性的字符。如果强行截取前3个字符,就不一定是姓名,会显得怪怪的:
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for %%i in (*) do if not "%%i"=="%~nx0" (
  4.     set "str=%%i"
  5.     set "str=!str:~,3!"
  6.     if not exist "!str!" md "!str!"
  7.     move "%%i" "!str!"
  8. )
  9. pause
复制代码

TOP

回复 7# dengao


参考set命令教程第8页
http://bbs.bathome.net/thread-31727-1-1.html
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

非常感谢您的回复,可以我表达的不清楚,如果文件名没有规律,我是想自动截取文件名中的任意关键字,比如取开头3个字,建立文件夹;并把文件移过去;该如何操作谢谢

TOP

本帖最后由 qixiaobin0715 于 2021-10-10 18:48 编辑

回复 5# dengao
就是将变量值中的“的”替换为空格。
两种需求合二为一:
  1. @echo off
  2. md 体检表,报告
  3. copy "*体检表*.*" "体检表"
  4. copy "*报告*.*" "报告"
  5. setlocal enabledelayedexpansion
  6. for %%i in (*) do (
  7.     set str=%%i
  8.     set str=!str:的= !
  9.     if not "%%i"=="%~nx0" (
  10.         for /f %%a in ("!str!") do (
  11.             if not exist %%a md %%a
  12.             move "%%i" "%%a"
  13.         )
  14.     )
  15. )
  16. pause
复制代码

TOP

set str=!str:的= !
这里没看懂,我想建立,体检表或报告的文件夹该如何操作,不胜感激谢谢!

TOP

牛牛,完全可以感谢大佬出手;

TOP

回复 1# dengao
开始代码有点小小问题,已修改。未测试。

TOP

本帖最后由 qixiaobin0715 于 2021-10-10 18:49 编辑

回复 1# dengao
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for %%i in (*) do (
  4.     set str=%%i
  5.     set str=!str:的= !
  6.     if not "%%i"=="%~nx0" (
  7.     for /f %%a in ("!str!") do (
  8.         if not exist %%a md %%a
  9.         move "%%i" "%%a"
  10.     ))
  11. )
  12. pause
复制代码

TOP

返回列表