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

[文本处理] 取 "[" 和 "]" 之间的字符,新建文件夹,然后移动进去

[复制链接]
发表于 2024-3-10 21:28:13 | 显示全部楼层 |阅读模式
我要写一个*.bat的代码,实现以下作用:
1、获取*.bat所在文件夹内(不包含子目录)的所有文件,文件名包含 "[" 和 "]" 的文件
2、将文件名按"[" 和 "]" 分隔,取"[" 和 "]" 之间的部分——%%a
3、 用"/a-d/b"表示只显示非目录文件的文件名
4、利用循环
5、在当前目录下创建一个%%a同文件名的文件夹
6、利用move 函数讲符合模式的文件移动到同名文件夹中

我写了好几个,都不对,请各位大声帮忙看看问题在哪?
帮我改一个能用的完整的代码。感谢!



错误代码1:
@echo off
setlocal enabledelayedexpansion

for /f "delims=" %%a in ('dir /a-d/b /s *[*]') do (
    set filename=%%~na
    set foldername=!filename:[=_!
    set foldername=!foldername:]=_!
    set foldername=!foldername: =_!
    if not exist !foldername! md !foldername!
    move "%%a" "!foldername!"
)


错误代码2:
@echo off
setlocal enabledelayedexpansion
for /f "tokens=1 delims=[]" %%a in ('dir /b *[*.*') do (
    set FileName=%%~na
    md "%FileName%" 2>nul
    for /f "delims=" %%b in ('dir /b "%FileName%*.txt"') do move "%%b" "%FileName%"
)
pause
发表于 2024-3-10 23:18:29 | 显示全部楼层
根据要求,只针对文件名中有一组[ ]符号的情况进行处理。
利用源文件[ ]内字符生成文件夹,并把该源文件移动到此文件夹内,源文件不改名。
  1. @echo off
  2. cd /d "%~dp0"
  3. for /f "tokens=1-2* delims=[]" %%a in ('dir /b /a-d *[*]*') do (
  4.     if not exist %%b md %%b
  5.     rem 运行查看移动文件无误后,再删除下面的echo,保持后才执行文件转移
  6.     echo move  "%%a[%%b]%%c" "%~dp0%%b"
  7. )
  8. pause
复制代码
发表于 2024-3-11 08:57:39 | 显示全部楼层
本帖最后由 77七 于 2024-3-11 09:00 编辑
  1. @echo off
  2. cd /d "%~dp0"
  3. rem for /f + dir 获取符合条件的文件名
  4. for /f "delims=" %%i in ('dir /b /a-d "*[*]*"') do (
  5.         rem 以[]为分隔符,取 #%%i 的第二部分 (#%%i 适用文件名,如 [abc]def.txt )
  6.         for /f "tokens=2 delims=[]" %%a in ("#%%i") do (
  7.                 rem 创建文件夹 %%a
  8.                 md "%%a" 2>nul
  9.                 rem 移动文件(如果已存%%a\%%i,同名文件提示)
  10.                 move /-y "%%i" "%%a"
  11.         )
  12. )
  13. pause
复制代码
发表于 2024-3-11 17:06:39 | 显示全部楼层
特殊的文件如何怎么弄,例如
123[]45.txt
12[3[4]5.txt
12]3[[4]5]].txt
 楼主| 发表于 2024-3-11 20:31:41 | 显示全部楼层
根据要求,只针对文件名中有一组[ ]符号的情况进行处理。
利用源文件[ ]内字符生成文件夹,并把该源文件移 ...
ppll2030 发表于 2024-3-10 23:18



        大佬貌似不行啊,这个,运行之后没反应

我有好多文件,文件最后(扩展名之前)用[ ]
分开的
现在就是想用个批处理,把[ ]之间的选出来,然后分类到同一个文件夹里面
如果单独一个,也就放单独一个文件夹内里面

麻烦大佬帮忙看看。。。。
 楼主| 发表于 2024-3-11 20:32:04 | 显示全部楼层
回复 4# Five66


    暂时还没遇到这种嵌套的
 楼主| 发表于 2024-3-11 20:33:06 | 显示全部楼层
77七 发表于 2024-3-11 08:57



        大佬貌似不行啊,这个,运行之后没反应(只有一个[]的分类了)

我有好多文件,(并不是在开头的)文件最后(扩展名之前)用[ ]
分开的
现在就是想用个批处理,把[ ]之间的选出来,然后分类到同一个文件夹里面
如果单独一个,也就放单独一个文件夹内里面。麻烦帮忙看看呗
发表于 2024-3-11 20:57:08 | 显示全部楼层
回复 7# 575085333


   
请提供几个文件名看看什么原因
发表于 2024-3-11 20:57:19 | 显示全部楼层
大佬貌似不行啊,这个,运行之后没反应

我有好多文件,文件最后(扩展名之前)用[ ]
...
575085333 发表于 2024-3-11 20:31



    代码保存为bat文件,编码格式ANSI。
bat文件跟所有要分类的文件放在一起。
 楼主| 发表于 2024-3-11 21:06:20 | 显示全部楼层
回复 8# 77七


    5A-DLC扯淡篇.笔记更新于2021.5.5[5233].rar
VBA第二季[5233].rar
VBA第三季[5233].rar
VBA第一季[5233].rar
高级篇笔记[5233].rar
高级篇课件[5233].rar
基础篇笔记[5233].rar
基础篇课件[5233].rar
进阶篇笔记[5233].rar
进阶篇课件[5233].rar
连接MySQL驱动[5233].zip
链接[6155].rar
前3季课件[6155].rar
全4季OneNote笔记[6155].rar
全4季PDF笔记[6155].rar
全3季PDF笔记[8535].rar

[5233]一个文件
[6155]一个文件
[8535]一个文件


酱紫
发表于 2024-3-11 21:15:37 | 显示全部楼层
本帖最后由 77七 于 2024-3-11 21:17 编辑

回复 10# 575085333


   
改一下 dir /b /a-d 那里,我写的[]和你的不一样,把你文件名里的两个符号复制替换过去
代码保存为ansi编码格式
发表于 2024-3-11 21:24:00 | 显示全部楼层
回复 10# 575085333


    同楼上。把代码对应的[]改成你的[]应该就可以了。
你这个是用的全角字符
发表于 2024-3-11 21:44:03 | 显示全部楼层

  1. @echo off&pause

  2. for %%a in (*) do (
  3. set file=%%a

  4. setlocal enabledelayedexpansion
  5. set file=!file:[=/!
  6. for %%b in ("!file!") do endlocal&set file2=%%~nb%%~xb

  7. setlocal enabledelayedexpansion
  8. if "!file!" neq "!file2!" (
  9. for /f "tokens=1,2 delims=]" %%c in ("!file2!") do (
  10. endlocal
  11. if "%%d" neq "" (
  12. if not exist "%%c" echo mkdir "%%c"&mkdir "%%c"
  13. echo,
  14. echo move "%%a" "%%c"
  15. echo,
  16. move "%%a" "%%c"
  17. )
  18. )
  19. ) else endlocal
  20. )
  21. pause
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-18 06:03 , Processed in 0.024238 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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