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

[文件操作] 【已解决】求助bat批量创建文件夹并将同名文件移入的相关问题

本帖最后由 1989615wx 于 2022-5-14 17:45 编辑

现有多个同名的文件,想自动创建同名的文件夹,并且把相同名字的文件移入同名文件夹内,并在末尾标记文件夹内文件的数量

原始文件:

    汽车销售合约书 4k   骆 便签和联单共版印.pdf[asx].1A.K.TIF
    汽车销售合约书 4k   骆 便签和联单共版印.pdf[asx].2A.K.TIF
    汽车销售合约书 4k   骆 便签和联单共版印.pdf[asx].3A.K.TIF

    生鲜采购计划表  大4K 娇.pdf[asy].1A.K.TIF
    生鲜采购计划表  大4K 娇.pdf[asy].2A.K.TIF

    欧航顶业+莘辰机械   4K 娇.pdf[ata].1A.K.TIF
    欧航顶业+莘辰机械   4K 娇.pdf[ata].2A.K.TIF

想要达到的效果:

汽车销售合约书 4k   骆 便签和联单共版印---3
生鲜采购计划表  大4K 娇---2
欧航顶业+莘辰机械   4K 娇---2

这些文件名里面有多个空格,识别空格就不太准确。

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "tokens=1*" %%a in ('dir /b /a-d *.pdf') do (
  4.     if defined str (
  5.         if not defined _%%a (
  6.             for %%i in (_!str!) do (
  7.                 md "!str!!%%i!"
  8.                 move "!str! *.pdf" "!str!---!%%i!\"
  9.             )
  10.         )
  11.     )
  12.     set str=%%a
  13.     set /a _!str!+=1
  14. )
  15. for %%i in (_!str!) do (
  16.     md "!str!!%%i!"
  17.     move "!str! *.pdf" "!str!---!%%i!\"
  18. )
  19. pause
复制代码

TOP

回复 1# 1989615wx


请参考Q-04把bat文件保存为ANSI编码:
https://mp.weixin.qq.com/s/Koje4FufWxWBs7ioDy_LJA
test_1.bat
  1. @echo off
  2. cd /d "%~dp0"
  3. setlocal enabledelayedexpansion
  4. for /f "tokens=1*" %%i in ('dir /b /a-d *.pdf') do (
  5.     set /a _%%i+=1
  6. )
  7. for /f "tokens=1-2 delims==" %%i in ('set _') do (
  8.     set "FolderLeft=%%i"
  9.     set "FolderRight=%%j"
  10.     set "FolderLeft=!FolderLeft:~1!"
  11.     if not exist "!FolderLeft!---!FolderRight!" (
  12.         md "!FolderLeft!---!FolderRight!"
  13.     )
  14.     move /y "!FolderLeft! *.pdf" "!FolderLeft!---!FolderRight!"
  15. )
  16. endlocal
复制代码
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 1# 1989615wx


请参考Q-04把bat文件保存为ANSI编码:
https://mp.weixin.qq.com/s/Koje4FufWxWBs7ioDy_LJA
test_2.bat
  1. @echo off
  2. cd /d "%~dp0"
  3. for /f "tokens=1*" %%i in ('dir /b /a-d *.pdf') do (
  4.     if not exist "%%i" (
  5.         md "%%i"
  6.     )
  7.     move /y "%%i %%j" "%%i"
  8. )
  9. setlocal enabledelayedexpansion
  10. for /f "delims=" %%i in ('dir /b /ad') do (
  11.     set "n=0"
  12.     for /f "delims=" %%i in ('dir /b /a-d "%%i"') do (
  13.         set /a n+=1
  14.     )
  15.     ren "%%i" "%%i---!n!"
  16. )
复制代码
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

本帖最后由 qixiaobin0715 于 2022-5-14 10:20 编辑

前N个字符是一个模糊概念,除非指定N的值才可以,举一个极端的例子,比如文件名为:
1abcd.pdf
12abc.pdf
123ab.pdf
1234a.pdf
第1个字符都相同;
前2个字符相同的有3个;
前3个字符相同的有2个;

如何取舍呢?

TOP

  1. @echo off&&setlocal enabledelayedexpansion
  2. for /f "tokens=1 delims= " %%i in ('dir /b/on "*.pdf"') do (
  3.     for /f "tokens=1 delims= " %%j in ('dir /b/on "%%i*.pdf"') do md %%i>nul 2>nul&&set p=1|| set /a p+=1
  4.   rd /q %%i>nul
  5.   md %%i---!p!>nul 2>nul
  6.   move /y "%%i*.pdf" "%%i---!p!\"
  7. )
  8. cls
  9. pause
复制代码
目的,学习批处理

TOP

回复 2# qixiaobin0715


    谢谢,这个代码可以创建同名文件夹和标记文件数量,但是没有把文件移入到同名文件夹内,不知道哪里出了问题

TOP

回复 5# qixiaobin0715


    嗯,这个我可以保证让文件名内空格之前文字都是相同的

TOP

回复 4# Batcher


    谢谢大佬,能否改一下,把识别空格改成识别[这个符号

TOP

回复 9# 1989615wx


    请给出具体的文件名
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 10# Batcher

原始文件:

    汽车销售合约书 4k   骆 便签和联单共版印.pdf[asx].1A.K.TIF
    汽车销售合约书 4k   骆 便签和联单共版印.pdf[asx].2A.K.TIF
    汽车销售合约书 4k   骆 便签和联单共版印.pdf[asx].3A.K.TIF

    生鲜采购计划表  大4K 娇.pdf[asy].1A.K.TIF
    生鲜采购计划表  大4K 娇.pdf[asy].2A.K.TIF

    欧航顶业+莘辰机械   4K 娇.pdf[ata].1A.K.TIF
    欧航顶业+莘辰机械   4K 娇.pdf[ata].2A.K.TIF

想要达到的效果:

汽车销售合约书 4k   骆 便签和联单共版印---3
生鲜采购计划表  大4K 娇---2
欧航顶业+莘辰机械   4K 娇---2

这些文件名里面有多个空格,识别空格就不太准确。

TOP

回复 11# 1989615wx
  1. @echo off
  2. cd /d "%~dp0"
  3. for /f "tokens=1* delims=[" %%i in ('dir /b /a-d *.tif') do (
  4.     if not exist "%%~ni" (
  5.         md "%%~ni"
  6.     )
  7.     move /y "%%i[%%j" "%%~ni"
  8. )
  9. setlocal enabledelayedexpansion
  10. for /f "delims=" %%i in ('dir /b /ad') do (
  11.     set "n=0"
  12.     for /f "delims=" %%i in ('dir /b /a-d "%%i"') do (
  13.         set /a n+=1
  14.     )
  15.     ren "%%i" "%%i---!n!"
  16. )
复制代码
1

评分人数

    • 1989615wx: 感谢大佬,完美解决!技术 + 1
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

  1. @echo off&&setlocal enabledelayedexpansion
  2. for /f "tokens=1 delims=." %%i in ('dir /b /a-d "*.tif"') do (
  3. set p=0
  4. for /f "delims=" %%j in ('dir /b /a-d "%%i*.*"') do echo %%j>nul 2>nul&&set /a p+=1||set p=0
  5.   md "%%i---!p!"
  6.   move /y "%%i*.*" "%%i---!p!\"
  7.   rd /q "%%i---0">nul
  8. )
  9. cls
  10. pause
复制代码
目的,学习批处理

TOP

回复 1# 1989615wx
举例时用真实场景或数据而不是自己来杜撰,并且改来改去的,能够减少浪费别人的时间和精力。

TOP

返回列表