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

[文件操作] [已解决]批处理怎样将多个文件移动到以文件名中指定字符串前缀命名文件夹里?

[复制链接]
发表于 2017-3-30 15:52:57 | 显示全部楼层 |阅读模式
本帖最后由 pcl_test 于 2018-4-11 21:55 编辑

将当前目录下规则命名的文件归置至相同字符文件夹下
我在当前目录下有大量的“AB0001#-5_调研报告.pdf”“AB0003#-5_对象研究报告.pdf”“AB0005#-5_竞争力报告.pdf”的文件(第3位字符~第6位字符为对象字符),希望可以归置至“01-0001#”“02-0002#”“03-0005#”文件夹下(第4位字符~第7位字符为对应规则)。

请教各位!


追问:如果变为“0001AB浇水量研究.pdf”“0003CD花卉供应商名单.pdf”“0005AA除虫记录.pdf”的文件(前4位字符为对象字符),希望可以归置至“0001乔木资料”“0002松树文件”“0005樟树除虫记录”文件夹下(前4位字符为对应规则)。请问代码应如何更改?

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

 楼主| 发表于 2017-3-30 17:48:22 | 显示全部楼层
本帖最后由 997666 于 2017-3-30 17:54 编辑

我参考了很多论坛同类帖子,大多数是以文件名前几位字符来新建文件夹,我这种情况跟之前网友不同之处有三点:

一、并非新建文件夹,而是移动至指定文件夹。

二、移动文件及对象文件夹的规则字符均不是前4位,而是中间的几位字符。

三、移动文件的名称字符长度不一。
发表于 2017-3-30 18:34:19 | 显示全部楼层
@echo off
setlocal enabledelayedexpansion
for /f %%i in ('dir /b /a-d') do (
    set "str=%%i"
    for /f %%a in ('dir /b /ad ^| findstr "^..-!str:~2,4!#$"') do (
        set "folder=%%a"
    )
    if exist "!folder!\" (
        move "%%i" "!folder!\"
    )
)
 楼主| 发表于 2017-3-31 09:35:44 | 显示全部楼层
本帖最后由 pcl_test 于 2017-3-31 14:34 编辑

回复 3# ShowCode


感谢帮助,我这边执行该代码后,目标文件均已经移动了,非常感谢你,写的代码错落有致,让人一目了然,而且将特别的地方标红,让我学会举一反三。

但还是想请教一下;

第5行
    for /f %%a in ('dir /b /ad ^| findstr "^..-!str:~2,4!#$"') do (
语句中的  findstr "^..-!str:~2,4!#$" 应该是寻找移动至目标文件夹,findstr对应字符意义如下;

.        通配符: 任何字符
*        重复: 以前字符或类出现零或零以上次数
^        行位置: 行的开始
$        行位置: 行的终点

我尝试改为将“AB0001#-5_调研报告.pdf”“AB0003#-5_对象研究报告.pdf”“AB0005#-5_竞争力报告.pdf”   对应   "A0001#""B0003#""C0005"  文件夹,
    for /f %%a in ('dir /b /ad ^| findstr "^.!str:~2,4!#$"') do (

这样实验成功,但是我想改为改为将“AB0001#-5_调研报告.pdf”“AB0003#-5_对象研究报告.pdf”“AB0005#-5_竞争力报告.pdf”   对应   "0001#""0003#""0005"  文件夹,
    for /f %%a in ('dir /b /ad ^| findstr "^!str:~2,4!#$"') do (

该批处理却不成功,文件被移动至根目录,我理解通配符删除了,那就应该从第一个字符开始对应了,为什么不行,请教一下,如何更改?

.
发表于 2017-3-31 14:05:58 | 显示全部楼层
回复 4# 997666
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f %%i in ('dir /b /a-d *.pdf') do (
  4.     set "str=%%i"
  5.     for /f %%a in ('dir /b /ad ^| findstr /b /e "!str:~2,4!#"') do (
  6.         set "folder=%%a"
  7.     )
  8.     if "!folder!" neq "" (
  9.         if exist "!folder!" (
  10.             move "%%i" "!folder!"
  11.         )
  12.     ) else (
  13.         echo Cannot find folder for %%i
  14.     )
  15. )
复制代码

评分

参与人数 1技术 +1 收起 理由
Batcher + 1 乐于助人

查看全部评分

 楼主| 发表于 2017-3-31 15:11:09 | 显示全部楼层
本帖最后由 997666 于 2017-4-26 17:46 编辑

回复 5# ShowCode


    完美执行,感谢!

追问:如果变为“0001AB浇水量研究.pdf”“0003CD花卉供应商名单.pdf”“0005AA除虫记录.pdf”的文件(前4位字符为对象字符),希望可以归置至“0001乔木资料”“0002松树文件”“0005樟树除虫记录”文件夹下(前4位字符为对应规则)。请问代码应如何更改?
发表于 2017-4-26 22:07:37 | 显示全部楼层
回复 6# 997666


    没做测试
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "delims=" %%i in ('dir /b /ad ^| findstr /b [0-9]0-9][0-9]0-9]') do (
  4.     set "str=%%i"
  5.     move "!str:~0,4!*.pdf" "%%i"
  6. )
  7. pause
复制代码
 楼主| 发表于 2017-4-27 10:14:49 | 显示全部楼层
回复 7# WHY


    感谢WHY朋友!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-17 20:04 , Processed in 0.017250 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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