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

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

[复制链接]
发表于 2012-3-12 20:50:10 | 显示全部楼层 |阅读模式
本帖最后由 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
复制代码
这个代码也只能是移动与文件夹相同的文件,请大侠帮忙~~~
发表于 2012-3-12 21:12:34 | 显示全部楼层
Copy 00001*.jpg 00001能否实现?
 楼主| 发表于 2012-3-12 21:15:53 | 显示全部楼层
是的啊,这样子能实现,怎么写出代码更能简捷一点呢
发表于 2012-3-12 22:06:36 | 显示全部楼层
本帖最后由 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
复制代码
发表于 2012-3-12 22:23:39 | 显示全部楼层
回复 4# apang


00001-00001.jpg
估计蓝色部分不一定是5位吧
 楼主| 发表于 2012-3-12 22:25:20 | 显示全部楼层
高手啊,解决了.....谢谢你啊~~~~
 楼主| 发表于 2012-3-12 22:40:10 | 显示全部楼层
回复 5# find


    是的啊,也有不是5位数的,如果那种情况下,我想应挺麻烦的吧
发表于 2012-3-13 09:56:12 | 显示全部楼层
回复  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!"
复制代码
发表于 2012-3-13 18:36:18 | 显示全部楼层
回复 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.

评分

参与人数 1技术 +1 收起 理由
apang + 1 学习了,受教了,谢谢。

查看全部评分

发表于 2012-3-13 20:43:03 | 显示全部楼层
本帖最后由 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
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-21 06:35 , Processed in 0.033901 second(s), 18 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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