标题: [文件操作] 批处理如何批量将文件名中具有相同前缀字符串的文件移动到以该字符串命名的文件夹里 [打印本页]
作者: wucnu 时间: 2012-3-12 20:50 标题: 批处理如何批量将文件名中具有相同前缀字符串的文件移动到以该字符串命名的文件夹里
本帖最后由 pcl_test 于 2016-7-7 20:00 编辑
现在又很多照片的命名都是
00001-00001.jpg 00001-00002.jpg 00001-00003.jpg......
00002-02-00001.jpg 00002-02-00002.jpg 00002-02-00003.jpg......
00003-00001.jpg 00003-00002.jpg 00003-00003.jpg......
..........................................
这些照片都放在同一个目录下,而且在此目录下还有很多文件夹,也就是-00001前面的文件夹名如00001 00002-02.............
需要把照片文件按文件名都是00001-*.jpg的都放入文件夹“00001”里面,00002-02-*.jpg的照片都放入文件夹“00002-02”。。。。。其他的都以此类推。- @echo off
- for /f "delims=" %%f in ('dir/b/a-d') do if exist "%%~nf\" move "%%f" "%%~nf"
- pause
复制代码
这个代码也只能是移动与文件夹相同的文件,请大侠帮忙~~~
作者: canyuexiaolang 时间: 2012-3-12 21:12
Copy 00001*.jpg 00001能否实现?
作者: wucnu 时间: 2012-3-12 21:15
是的啊,这样子能实现,怎么写出代码更能简捷一点呢
作者: apang 时间: 2012-3-12 22:06
本帖最后由 apang 于 2012-3-12 22:07 编辑
- @echo off
- setlocal enabledelayedexpansion
- for /f "delims=" %%f in ('dir/b/a-d *.jpg') do (
- set name=%%~nf
- set name=!name:~,-6!
- if exist !name!\nul move "%%f" "!name!"
- )
- pause
复制代码
作者: find 时间: 2012-3-12 22:23
回复 4# apang
00001-00001.jpg
估计蓝色部分不一定是5位吧
作者: wucnu 时间: 2012-3-12 22:25
高手啊,解决了.....谢谢你啊~~~~
作者: wucnu 时间: 2012-3-12 22:40
回复 5# find
是的啊,也有不是5位数的,如果那种情况下,我想应挺麻烦的吧
作者: apang 时间: 2012-3-13 09:56
回复 apang
00001-00001.jpg
估计蓝色部分不一定是5位吧
find 发表于 2012-3-12 22:23
以“-”作为判断依据,如何?- @echo off&setlocal enabledelayedexpansion
- for /f "delims=" %%f in ('dir/b/a-d *.jpg') do (
- set "name=%%~nf"
- call :loop
- if exist !name!\nul move "%%f" "!name!"
- )
- goto :eof
-
- :loop
- if not "!name:~-1!"=="-" set "name=!name:~,-1!"&goto loop
- set "name=!name:~,-1!"
复制代码
作者: find 时间: 2012-3-13 18:36
回复 8# apang
可行。就是loop的次数显得稍多。
另外一个思路是用set命令替换的时候加上通配符,做两次替换。
%PATH:str1=str2%
would expand the PATH environment variable, substituting each occurrence
of "str1" in the expanded result with "str2". "str2" can be the empty
string to effectively delete all occurrences of "str1" from the expanded
output. "str1" can begin with an asterisk, in which case it will match
everything from the beginning of the expanded output to the first
occurrence of the remaining portion of str1.
作者: apang 时间: 2012-3-13 20:43
本帖最后由 pcl_test 于 2017-1-9 14:21 编辑
回复 9# find
这个方法妙,学习了。- @echo off&setlocal enabledelayedexpansion
- for /f "delims=" %%f in ('dir/b/a-d *.jpg') do (
- set "Name=%%~nf"
- set "Name1=!Name:*-=!"
- set "Name1=!Name1:*-=!"
- call set "Name=%%Name:-!Name1!=%%"
- if not exist "!Name!" md "!Name!"
- move "%%f" "!Name!"
- )
- pause
复制代码
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |