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

[文件操作] [已解决]批处理如何将相同名称文件放在一个文件夹?

[复制链接]
发表于 2012-3-31 22:41:11 | 显示全部楼层 |阅读模式
本帖最后由 iotalinen 于 2012-4-3 20:54 编辑

有一批数据,aa.tif,aa.xls,aa.txt……ab.tif,ab.xls,ab.txt…ac.tif,ac.xls,ac.txt…………
希望,将aa.tif,aa.xls,aa.txt…… 放在一个新建的 名称为 aa 的文件夹,ab.tif,ab.xls,ab.txt…   放在一个新建的 名称为 ab 的文件夹

补充
1,文件类型不一定是上面举例的,所以需要可以 设置 文件格式的 代码
2,如果需要有四种不同格式,名称相同的文件,放在一个文件夹。但必须同时存在四个文件名相同格式不同时,才放在一个与文件名一致的文件夹,如果不够四个,或多出未指定格式的文件,就不创建这个文件夹也不移动文件。

评分

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

查看全部评分

发表于 2012-4-1 08:04:13 | 显示全部楼层
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%a in ('dir /a-d /b') do (
  3.   if not defined .%%~na set ".%%~na=1"
  4. )
  5. for /f "delims==" %%a in ('set.') do (
  6.   set "name=%%a"
  7.   set "name=!name:~1!"
  8.   dir /a-d "!name!.*"|findstr /c:"4 个文件">nul
  9.   if "!errorlevel!"=="0" md "!name!"&move "!name!.*" "!name!"
  10. )
复制代码

评分

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

查看全部评分

发表于 2012-4-1 08:06:52 | 显示全部楼层
本帖最后由 ArdentMan 于 2012-4-1 08:49 编辑

  1. @Echo Off&SetLocal EnableDelayedExpansion
  2. Set /P Ext=输入指定的文件格式,各格式间请用空格格开:
  3. For /F "Delims=" %%i In ('Dir /a-d /b /on') Do (
  4.   If "!Str!" NEQ "%%~ni" (
  5.     If "!n!" EQU "4" If "!m!" EQU "4" (
  6.       Md "!Str!"
  7.       Move "!Str!.*" "!Str!"
  8.     )
  9.     Set /A n=0,m=0
  10.   )
  11.   Set /a m+=1
  12.   For %%j In (%Ext%) Do If /i ".%%j" EQU "%%~xi" Set "Flag=a"
  13.   If Defined Flag Set /A n+=1&Set "Flag="
  14.   Set "Str=%%~ni"
  15. )
  16. Echo ok
  17. Pause>Nul
复制代码

评分

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

查看全部评分

 楼主| 发表于 2012-4-1 20:09:42 | 显示全部楼层
呵呵   很菜啊   连在哪里更改设置 需要的 格式亦不知道啊
能在多点注释吗
发表于 2012-4-1 21:34:26 | 显示全部楼层
回复 4# iotalinen


不如多看点基础教程吧
 楼主| 发表于 2012-4-1 21:51:52 | 显示全部楼层
我再说明一下

上图是我 执行  ArdentMan  上尉的代码后的效果


而 apang 中尉的代码执行后没有反应


听取  find 大校的建议 学习中
发表于 2012-4-1 22:32:25 | 显示全部楼层
回复 6# iotalinen

用代码下面的复制代码,保存在要批量移动的文件位置。假如要移动的所有文件在d:\123目录下,就将代码保存在d:\123目录下,命名为aa.bat,双击aa.bat运行。再看看有木有反应。
发表于 2012-4-2 01:02:23 | 显示全部楼层
不含特殊文件名时(不能含有运算符或 !、=)可以这样:
  1. @echo off&setlocal enabledelayedexpansion
  2. for %%a in (*.*) do (
  3.    set /a "\%%~na+=1"
  4. )
  5. for /f "delims=" %%a in ('set \^|findstr "=4"') do (
  6.    set name=%%a
  7.    md "!name:1~,-2!"
  8.    move "!name:1~,-2!.*" "!name:1~,-2!"
  9. )
复制代码
发表于 2012-4-2 01:15:39 | 显示全部楼层
本帖最后由 CrLf 于 2012-4-2 01:17 编辑

若要兼容性好一些,也可这样:
  1. @echo off
  2. for %%a in (*) do if %%~xa neq .$ (
  3.    set "na=%%~na"
  4.    set "fa=%%~fa"
  5.    setlocal enabledelayedexpansion
  6.    for %%b in ("!na!*") do (
  7.       set /a n+=1
  8.    )
  9.    if !n!==4 (
  10.        md "!na!"
  11.        move "!na!.*" "!na!"
  12.        endlocal
  13.    ) else (
  14.        for %%b in ("!na!*") do (
  15.            endlocal
  16.            ren "%%b" "%%b.$"
  17.        )
  18.    )
  19. )
  20. ren * *.
复制代码

评分

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

查看全部评分

 楼主| 发表于 2012-4-2 21:25:36 | 显示全部楼层
感谢 CrLf 版主的关注,我试了一下,第二个代码是可以达到效果的。

我做了一下实验,发现代码执行时,必须同名称的4个格式的文件。如果有同名称的5个格式的文件就不会执行。当然,我可以提前预处理将不需要的格式删除。但是奢侈点想法就是,设置我所需要的文件格式。
呵呵,感谢高手们继续激发我对批处理的热情,用起来真的很爽啊。
 楼主| 发表于 2012-4-2 21:30:06 | 显示全部楼层
补充一下,下面是我百度的一段代码,测试OK。
我就希望有一个类似这样的,我可以  set 1   ,2,3,4 下去就可以了。
哈哈
  1. set a=txt
  2. set b=JPG
  3. for /f "delims=" %%a in ('dir /b/a-d *.%a%') do if exist ".\%%~na.%b%" md ".\%%~na" 2>nul&move "%%a" ".\%%~na" 2>nul&move ".\%%~na.%b%" ".\%%~na" 2>nul
  4. pause
复制代码
 楼主| 发表于 2012-4-3 21:19:42 | 显示全部楼层
ArdentMan  上尉的代码的这句好像有问题


Set /P Ext=输入指定的文件格式,各格式间请用空格格开:

我改为     Set /P Ext=    或者   Set /P Ext=“input”
就是说,要有引号, 而且不能有汉字
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-18 21:12 , Processed in 0.022863 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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