标题: [文件操作] [已解决]批处理检查当前目录下文件名是否符合规则 [打印本页]
作者: a6236130 时间: 2024-6-4 23:43 标题: [已解决]批处理检查当前目录下文件名是否符合规则
本帖最后由 a6236130 于 2024-6-5 14:29 编辑
- @echo off
- setlocal enabledelayedexpansion
-
- >list.log echo 不符合命名规则的文件列表:
-
- for /d /r %%D in (*) do (
- for %%F in ("%%D\*") do (
- set "fullFileName=%%~nxF"
- set "parentDir=%%~nxD"
- set "lastDash=!fullFileName:*-=-!"
- set "folderName=!fullFileName:~0,-5!"
- set "expectedName=!folderName!-!fullFileName:~-4!"
-
- if NOT "!fullFileName!" == "!expectedName!" (
- echo %%D\%%F >> list.log
- )
- )
- )
- pause
复制代码
数据规则1、文件名格式为文件所在文件夹名称-文件名,其中文件名中最后一个“-”之前就是文件夹名称,“-”之后则是文件名(即文件名中最后五位数为“-”+原四位数文件名)。注意:文件名中的文件夹名称中存在“-、·“,故而需要以文件名中最后一个“-”进行判断取值文件夹名称和文件名。
功能1、遍历当前目录下所有文件夹和文件。2、检查所有文件的文件名是否为文件所在上级文件夹名称-文件名。3,如有检查出文件名不符合文件所在上级文件夹名称-文件名该规则的,则将该文件记录下来,保存为list.log。
请问我的代码哪里出问题了?最好有个详细代码,我好对比一下。求解!
作者: Batcher 时间: 2024-6-5 08:31
回复 1# a6236130
请截图提供以下内容:
1、符合规则的文件名及其所在的文件夹
2、不符合规则的文件名及其所在的文件夹
3、你的代码得到的结果与希望的结果之间有哪些差异
如果需要上传截图,可以找个图床,例如:
http://bbs.bathome.net/thread-60985-1-1.html
作者: qixiaobin0715 时间: 2024-6-5 08:39
描述的还是不太清楚,最好文件名能举个例子,只能进行大致判断,不知是否可行,代码未测试:- @echo off
- (for /f "delims=" %%i in ('dir /s /b /ad') do (
- pushd "%%i"
- for /f "delims=" %%j in ('dir /b /a-d^|findstr /bv "%%~nxi\-"') do (
- echo,"%%i\%%j"
- )
- popd
- ))>list.log
- pause
复制代码
作者: a6236130 时间: 2024-6-5 14:27
回复 3# qixiaobin0715
谢谢!达到效果!
作者: a6236130 时间: 2024-6-5 14:29
回复 2# Batcher
好的,谢谢!
作者: qixiaobin0715 时间: 2024-6-5 15:28
本帖最后由 qixiaobin0715 于 2024-6-5 15:34 编辑
回复 1# a6236130
按照你的大体思路,应当也可以:- @echo off
- setlocal enabledelayedexpansion
- (for /f "delims=" %%i in ('dir /s /b /ad') do (
- pushd "%%i"
- for /f "delims=" %%j in ('dir /b /a-d') do (
- set str=%%~nj
- set str=!str:~,-5!
- if not "!str!"=="%%~nxi" echo,%%i\%%j
- )
- popd
- ))>list.log
- pause
复制代码
作者: a6236130 时间: 2024-6-5 15:58
本帖最后由 a6236130 于 2024-6-5 15:59 编辑
回复 6# qixiaobin0715
:lol 奈斯!
想再扩展一下,除了检查最低层文件名与其父级文件夹名称是否为一致,另外增加一个检查最底层文件夹与其上级文件夹名称是否为一致(例如:子文件夹AAA-BBB-CCC-01,父级文件夹名称为AAA-BBB-CCC ,同理获取子文件夹中的最后一个“-”作为取文件夹名称的依据。注意:文件夹结构不统一,有的除了父文件夹、子文件夹,也会有父文件夹、子文件夹、子子文件夹.....,以此类推。故而检查依据为取每个路径下最底层文件夹)
作者: qixiaobin0715 时间: 2024-6-5 17:09
本帖最后由 qixiaobin0715 于 2024-6-5 17:12 编辑
未仔细考虑,大概是这样:- @echo off
- for /f "delims=" %%i in ('dir /s /b /ad') do (
- setlocal enabledelayedexpansion
- dir /b /ad "%%i"|findstr .>nul 2>nul
- if errorlevel 1 (
- set "str1=%%~nxi"
- for %%j in ("%%i\..") do (
- set "str2=!str1:%%~nxj=!"
- if "!str1!"=="!str2!" echo,%%i
- )
- )
- endlocal
- )
- pause
复制代码
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |