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

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

我要写一个*.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

根据要求,只针对文件名中有一组[ ]符号的情况进行处理。
利用源文件[ ]内字符生成文件夹,并把该源文件移动到此文件夹内,源文件不改名。
  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
复制代码

TOP

本帖最后由 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
复制代码
bat小白,请多指教!谢谢!

TOP

特殊的文件如何怎么弄,例如
123[]45.txt
12[3[4]5.txt
12]3[[4]5]].txt

TOP

根据要求,只针对文件名中有一组[ ]符号的情况进行处理。
利用源文件[ ]内字符生成文件夹,并把该源文件移 ...
ppll2030 发表于 2024-3-10 23:18



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

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

麻烦大佬帮忙看看。。。。

TOP

回复 4# Five66


    暂时还没遇到这种嵌套的

TOP

77七 发表于 2024-3-11 08:57



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

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

TOP

回复 7# 575085333


   
请提供几个文件名看看什么原因
bat小白,请多指教!谢谢!

TOP

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

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



    代码保存为bat文件,编码格式ANSI。
bat文件跟所有要分类的文件放在一起。

TOP

回复 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]一个文件


酱紫

TOP

本帖最后由 77七 于 2024-3-11 21:17 编辑

回复 10# 575085333


   
改一下 dir /b /a-d 那里,我写的[]和你的不一样,把你文件名里的两个符号复制替换过去
代码保存为ansi编码格式
bat小白,请多指教!谢谢!

TOP

回复 10# 575085333


    同楼上。把代码对应的[]改成你的[]应该就可以了。
你这个是用的全角字符

TOP

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

TOP

返回列表