标题: [文件操作] 求助批处理文件整理,谢谢 [打印本页]
作者: 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 - @echo off
- setlocal enabledelayedexpansion
- for %%i in (*) do (
- set str=%%i
- set str=!str:的= !
- if not "%%i"=="%~nx0" (
- for /f %%a in ("!str!") do (
- if not exist %%a md %%a
- move "%%i" "%%a"
- ))
- )
- 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
就是将变量值中的“的”替换为空格。
两种需求合二为一:- @echo off
- md 体检表,报告
- copy "*体检表*.*" "体检表"
- copy "*报告*.*" "报告"
- setlocal enabledelayedexpansion
- for %%i in (*) do (
- set str=%%i
- set str=!str:的= !
- if not "%%i"=="%~nx0" (
- for /f %%a in ("!str!") do (
- if not exist %%a md %%a
- move "%%i" "%%a"
- )
- )
- )
- 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个字符,就不一定是姓名,会显得怪怪的:- @echo off
- setlocal enabledelayedexpansion
- for %%i in (*) do if not "%%i"=="%~nx0" (
- set "str=%%i"
- set "str=!str:~,3!"
- if not exist "!str!" md "!str!"
- move "%%i" "!str!"
- )
- pause
复制代码
作者: dos大帝 时间: 2021-10-14 21:04
本帖最后由 dos大帝 于 2021-10-14 21:09 编辑
- @echo off & setLocal enableDelayedExpansion & cd /d "%~dp0"
-
- goto comment
- 代码作用局限:
- 不能移动隐藏文件或者系统文件
- 不会移动子目录下的文件
- 若之前已有目录, 会覆盖目录下重名文件
- 关键字有中文存在,所以该代码保存为bat文件时得用GKB编码
- :comment
-
- rem 要截取的关键字, 可继续往后添加, 包含这些字段的文件都会移动, 若同时包含有多个关键字, 则按下面填写的顺序移动
- set key=张三 李四 王麻子
-
- for %%i in (%key%) do (
- md "%%i"
-
- for /f "delims=" %%j in ('dir /b /a-d-s-h') do (
- echo "%%~nj" | find "%%i" > nul && set is=0
-
- if !is!==0 (
- move "%%~nxj" "%%i"
- )
-
- set is=1
- )
- )
-
- pause
复制代码
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |