标题: [文本处理] 取 "[" 和 "]" 之间的字符,新建文件夹,然后移动进去 [打印本页]
作者: 575085333 时间: 2024-3-10 21:28 标题: 取 "[" 和 "]" 之间的字符,新建文件夹,然后移动进去
我要写一个*.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
作者: ppll2030 时间: 2024-3-10 23:18
根据要求,只针对文件名中有一组[ ]符号的情况进行处理。
利用源文件[ ]内字符生成文件夹,并把该源文件移动到此文件夹内,源文件不改名。- @echo off
- cd /d "%~dp0"
- for /f "tokens=1-2* delims=[]" %%a in ('dir /b /a-d *[*]*') do (
- if not exist %%b md %%b
- rem 运行查看移动文件无误后,再删除下面的echo,保持后才执行文件转移
- echo move "%%a[%%b]%%c" "%~dp0%%b\"
- )
- pause
复制代码
作者: 77七 时间: 2024-3-11 08:57
本帖最后由 77七 于 2024-3-11 09:00 编辑
- @echo off
- cd /d "%~dp0"
- rem for /f + dir 获取符合条件的文件名
- for /f "delims=" %%i in ('dir /b /a-d "*[*]*"') do (
- rem 以[]为分隔符,取 #%%i 的第二部分 (#%%i 适用文件名,如 [abc]def.txt )
- for /f "tokens=2 delims=[]" %%a in ("#%%i") do (
- rem 创建文件夹 %%a
- md "%%a" 2>nul
- rem 移动文件(如果已存%%a\%%i,同名文件提示)
- move /-y "%%i" "%%a\"
- )
- )
- pause
复制代码
作者: Five66 时间: 2024-3-11 17:06
特殊的文件如何怎么弄,例如
123[]45.txt
12[3[4]5.txt
12]3[[4]5]].txt
作者: 575085333 时间: 2024-3-11 20:31
根据要求,只针对文件名中有一组[ ]符号的情况进行处理。
利用源文件[ ]内字符生成文件夹,并把该源文件移 ...
ppll2030 发表于 2024-3-10 23:18
大佬貌似不行啊,这个,运行之后没反应
我有好多文件,文件最后(扩展名之前)用[ ]
分开的
现在就是想用个批处理,把[ ]之间的选出来,然后分类到同一个文件夹里面
如果单独一个,也就放单独一个文件夹内里面
麻烦大佬帮忙看看。。。。
作者: 575085333 时间: 2024-3-11 20:32
回复 4# Five66
暂时还没遇到这种嵌套的
作者: 575085333 时间: 2024-3-11 20:33
77七 发表于 2024-3-11 08:57
大佬貌似不行啊,这个,运行之后没反应(只有一个[]的分类了)
我有好多文件,(并不是在开头的)文件最后(扩展名之前)用[ ]
分开的
现在就是想用个批处理,把[ ]之间的选出来,然后分类到同一个文件夹里面
如果单独一个,也就放单独一个文件夹内里面。麻烦帮忙看看呗
作者: 77七 时间: 2024-3-11 20:57
回复 7# 575085333
请提供几个文件名看看什么原因
作者: ppll2030 时间: 2024-3-11 20:57
大佬貌似不行啊,这个,运行之后没反应
我有好多文件,文件最后(扩展名之前)用[ ]
...
575085333 发表于 2024-3-11 20:31
代码保存为bat文件,编码格式ANSI。
bat文件跟所有要分类的文件放在一起。
作者: 575085333 时间: 2024-3-11 21:06
回复 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]一个文件
酱紫
作者: 77七 时间: 2024-3-11 21:15
本帖最后由 77七 于 2024-3-11 21:17 编辑
回复 10# 575085333
改一下 dir /b /a-d 那里,我写的[]和你的不一样,把你文件名里的两个符号复制替换过去
代码保存为ansi编码格式
作者: ppll2030 时间: 2024-3-11 21:24
回复 10# 575085333
同楼上。把代码对应的[]改成你的[]应该就可以了。
你这个是用的全角字符
作者: Five66 时间: 2024-3-11 21:44
- @echo off&pause
-
- for %%a in (*) do (
- set file=%%a
-
- setlocal enabledelayedexpansion
- set file=!file:[=/!
- for %%b in ("!file!") do endlocal&set file2=%%~nb%%~xb
-
- setlocal enabledelayedexpansion
- if "!file!" neq "!file2!" (
- for /f "tokens=1,2 delims=]" %%c in ("!file2!") do (
- endlocal
- if "%%d" neq "" (
- if not exist "%%c" echo mkdir "%%c"&mkdir "%%c"
- echo,
- echo move "%%a" "%%c\"
- echo,
- move "%%a" "%%c\"
- )
- )
- ) else endlocal
- )
- pause
复制代码
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |