[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

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

本帖最后由 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
复制代码
这个代码也只能是移动与文件夹相同的文件,请大侠帮忙~~~

本帖最后由 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
复制代码

TOP

回复 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

评分人数

    • apang: 学习了,受教了,谢谢。技术 + 1

TOP

回复  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!"
复制代码

TOP

回复 5# find


    是的啊,也有不是5位数的,如果那种情况下,我想应挺麻烦的吧

TOP

高手啊,解决了.....谢谢你啊~~~~

TOP

回复 4# apang


00001-00001.jpg
估计蓝色部分不一定是5位吧

TOP

本帖最后由 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
复制代码

TOP

是的啊,这样子能实现,怎么写出代码更能简捷一点呢

TOP

Copy 00001*.jpg 00001能否实现?

TOP

返回列表