标题: [文件操作] [已解决]批处理如何将相同名称文件放在一个文件夹? [打印本页]
作者: iotalinen 时间: 2012-3-31 22:41 标题: [已解决]批处理如何将相同名称文件放在一个文件夹?
本帖最后由 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,如果需要有四种不同格式,名称相同的文件,放在一个文件夹。但必须同时存在四个文件名相同格式不同时,才放在一个与文件名一致的文件夹,如果不够四个,或多出未指定格式的文件,就不创建这个文件夹也不移动文件。
作者: apang 时间: 2012-4-1 08:04
- @echo off&setlocal enabledelayedexpansion
- for /f "delims=" %%a in ('dir /a-d /b') do (
- if not defined .%%~na set ".%%~na=1"
- )
- for /f "delims==" %%a in ('set.') do (
- set "name=%%a"
- set "name=!name:~1!"
- dir /a-d "!name!.*"|findstr /c:"4 个文件">nul
- if "!errorlevel!"=="0" md "!name!"&move "!name!.*" "!name!\"
- )
复制代码
作者: ArdentMan 时间: 2012-4-1 08:06
本帖最后由 ArdentMan 于 2012-4-1 08:49 编辑
- @Echo Off&SetLocal EnableDelayedExpansion
- Set /P Ext=输入指定的文件格式,各格式间请用空格格开:
- For /F "Delims=" %%i In ('Dir /a-d /b /on') Do (
- If "!Str!" NEQ "%%~ni" (
- If "!n!" EQU "4" If "!m!" EQU "4" (
- Md "!Str!"
- Move "!Str!.*" "!Str!\"
- )
- Set /A n=0,m=0
- )
- Set /a m+=1
- For %%j In (%Ext%) Do If /i ".%%j" EQU "%%~xi" Set "Flag=a"
- If Defined Flag Set /A n+=1&Set "Flag="
- Set "Str=%%~ni"
- )
- Echo ok
- Pause>Nul
复制代码
作者: iotalinen 时间: 2012-4-1 20:09
呵呵 很菜啊 连在哪里更改设置 需要的 格式亦不知道啊
能在多点注释吗
作者: find 时间: 2012-4-1 21:34
回复 4# iotalinen
不如多看点基础教程吧
作者: iotalinen 时间: 2012-4-1 21:51
我再说明一下
上图是我 执行 ArdentMan 上尉的代码后的效果
而 apang 中尉的代码执行后没有反应
听取 find 大校的建议 学习中
作者: apang 时间: 2012-4-1 22:32
回复 6# iotalinen
用代码下面的复制代码,保存在要批量移动的文件位置。假如要移动的所有文件在d:\123目录下,就将代码保存在d:\123目录下,命名为aa.bat,双击aa.bat运行。再看看有木有反应。
作者: CrLf 时间: 2012-4-2 01:02
不含特殊文件名时(不能含有运算符或 !、=)可以这样:- @echo off&setlocal enabledelayedexpansion
- for %%a in (*.*) do (
- set /a "\%%~na+=1"
- )
- for /f "delims=" %%a in ('set \^|findstr "=4"') do (
- set name=%%a
- md "!name:1~,-2!"
- move "!name:1~,-2!.*" "!name:1~,-2!\"
- )
复制代码
作者: CrLf 时间: 2012-4-2 01:15
本帖最后由 CrLf 于 2012-4-2 01:17 编辑
若要兼容性好一些,也可这样:- @echo off
- for %%a in (*) do if %%~xa neq .$ (
- set "na=%%~na"
- set "fa=%%~fa"
- setlocal enabledelayedexpansion
- for %%b in ("!na!*") do (
- set /a n+=1
- )
- if !n!==4 (
- md "!na!"
- move "!na!.*" "!na!\"
- endlocal
- ) else (
- for %%b in ("!na!*") do (
- endlocal
- ren "%%b" "%%b.$"
- )
- )
- )
- ren * *.
复制代码
作者: iotalinen 时间: 2012-4-2 21:25
感谢 CrLf 版主的关注,我试了一下,第二个代码是可以达到效果的。
我做了一下实验,发现代码执行时,必须同名称的4个格式的文件。如果有同名称的5个格式的文件就不会执行。当然,我可以提前预处理将不需要的格式删除。但是奢侈点想法就是,设置我所需要的文件格式。
呵呵,感谢高手们继续激发我对批处理的热情,用起来真的很爽啊。
作者: iotalinen 时间: 2012-4-2 21:30
补充一下,下面是我百度的一段代码,测试OK。
我就希望有一个类似这样的,我可以 set 1 ,2,3,4 下去就可以了。
哈哈- set a=txt
- set b=JPG
- 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
- pause
复制代码
作者: iotalinen 时间: 2012-4-3 21:19
ArdentMan 上尉的代码的这句好像有问题
Set /P Ext=输入指定的文件格式,各格式间请用空格格开:
我改为 Set /P Ext= 或者 Set /P Ext=“input”
就是说,要有引号, 而且不能有汉字
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |