Board logo

标题: [文件操作] 批处理如何批量将文件名中具有相同前缀字符串的文件移动到以该字符串命名的文件夹里 [打印本页]

作者: 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”。。。。。其他的都以此类推。
  1. @echo off
  2. for /f "delims=" %%f in ('dir/b/a-d') do if exist "%%~nf\" move "%%f" "%%~nf"
  3. 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 编辑
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "delims=" %%f in ('dir/b/a-d *.jpg') do (
  4.     set name=%%~nf
  5.     set name=!name:~,-6!
  6.     if exist !name!\nul move "%%f" "!name!"
  7. )
  8. 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


以“-”作为判断依据,如何?
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%f in ('dir/b/a-d *.jpg') do (
  3.     set "name=%%~nf"
  4.     call :loop
  5.     if exist !name!\nul move "%%f" "!name!"
  6. )
  7. goto :eof
  8. :loop
  9. if not "!name:~-1!"=="-" set "name=!name:~,-1!"&goto loop
  10. 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

这个方法妙,学习了。
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%f in ('dir/b/a-d *.jpg') do (
  3.    set "Name=%%~nf"
  4.    set "Name1=!Name:*-=!"
  5.    set "Name1=!Name1:*-=!"
  6.    call set "Name=%%Name:-!Name1!=%%"
  7.    if not exist "!Name!" md "!Name!"
  8.    move "%%f" "!Name!"
  9. )
  10. pause
复制代码





欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2