Board logo

标题: [文件操作] 求助批处理文件整理,谢谢 [打印本页]

作者: dengao    时间: 2021-10-10 16:02     标题: 求助批处理文件整理,谢谢

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

谢谢;

自己做了没有头绪;不知道怎么取文件名的前二,三个字,建立文件夹,欢迎提供帮助,功德无量谢谢。
作者: qixiaobin0715    时间: 2021-10-10 16:12

本帖最后由 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
复制代码

作者: qixiaobin0715    时间: 2021-10-10 16:28

回复 1# dengao
开始代码有点小小问题,已修改。未测试。
作者: dengao    时间: 2021-10-10 16:38

牛牛,完全可以感谢大佬出手;
作者: dengao    时间: 2021-10-10 17:26

set str=!str:的= !
这里没看懂,我想建立,体检表或报告的文件夹该如何操作,不胜感激谢谢!
作者: qixiaobin0715    时间: 2021-10-10 18:43

本帖最后由 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
复制代码

作者: dengao    时间: 2021-10-10 21:11

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

回复 7# dengao


参考set命令教程第8页
http://bbs.bathome.net/thread-31727-1-1.html
作者: qixiaobin0715    时间: 2021-10-10 21:42

回复 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
复制代码

作者: dos大帝    时间: 2021-10-14 21:04

本帖最后由 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
复制代码





欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2