Board logo

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

作者: 1989615wx    时间: 2022-5-14 00:58     标题: 【已解决】求助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

这些文件名里面有多个空格,识别空格就不太准确。
作者: qixiaobin0715    时间: 2022-5-14 09:25

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

作者: Batcher    时间: 2022-5-14 09:46

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

作者: Batcher    时间: 2022-5-14 09:52

回复 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. )
复制代码

作者: qixiaobin0715    时间: 2022-5-14 10:19

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

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

如何取舍呢?
作者: hlzj88    时间: 2022-5-14 11:53

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

作者: 1989615wx    时间: 2022-5-14 14:04

回复 2# qixiaobin0715


    谢谢,这个代码可以创建同名文件夹和标记文件数量,但是没有把文件移入到同名文件夹内,不知道哪里出了问题
作者: 1989615wx    时间: 2022-5-14 14:08

回复 5# qixiaobin0715


    嗯,这个我可以保证让文件名内空格之前文字都是相同的
作者: 1989615wx    时间: 2022-5-14 14:24

回复 4# Batcher


    谢谢大佬,能否改一下,把识别空格改成识别[这个符号
作者: Batcher    时间: 2022-5-14 14:35

回复 9# 1989615wx


    请给出具体的文件名
作者: 1989615wx    时间: 2022-5-14 14:42

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

这些文件名里面有多个空格,识别空格就不太准确。
作者: Batcher    时间: 2022-5-14 17:37

回复 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. )
复制代码

作者: hlzj88    时间: 2022-5-14 18:15

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

作者: qixiaobin0715    时间: 2022-5-15 09:41

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




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