BAT脚本 获取目录下2级目录文件夹名称
本帖最后由 Tiana丶Tiana 于 2024-4-25 09:56 编辑因为工作中遇到需要统计超多的文件夹名字。懒得写程序又想省力气,就只能选择经常被人遗忘的BAT脚本。
适用于:统计工作
使用情景:
1948年 - 2023工作内容 ,每一年下面的子文件夹名称需要与数据表中名称核对一致。显然让你去每个文件去粘贴复制到EXCEL是不可能的。
优化后更好的方法可以看后面:一楼大佬
@echo off
title 文件夹目录获取
for /f "delims=" %%a in ('cd') do @set CURRENT_DIR=%%a
echo 当前路径: %CURRENT_DIR%
dir /AD /B %CURRENT_DIR% > dirlist.txt
set tag=\
set tag2=\dirlist.txt
set dirlist=%CURRENT_DIR%%tag2%
for /f %%i in (%dirlist%) do (
echo 正在处理路径: %CURRENT_DIR%%tag%%%i
dir /ad /b %CURRENT_DIR%%tag%%%i>> list.txt
)
del %CURRENT_DIR%%tag2%
echo---------------------------------------------
echo已写入到 %CURRENT_DIR% list.txt 文件
echo---------------------------------------------
pause
本帖最后由 namejm 于 2024-4-22 13:01 编辑
感觉楼主的代码还可以再优化一下:
1、获取当前文件夹路径没必要放在 for 语句中处理,直接用 %cd% 获取即可
2、既然都已经用到 for 了,就没必要再使用临时文件,可以使用 for 语句嵌套
3、如果文件夹名中包含了 & ,代码必然出错,路径名称最好用双引号括起来,正式引用前再在文本中批量去除双引号即可
4、在 for 语句中用 dir >>txt 语句频繁写入文本,如果第一层文件夹数量超多,CPU占用和写入速度应该是很难令人满意的
试着优化一下代码:
@echo off
title 卷宗目录获取
echo 当前路径: "%CD%"
(for /f "delims=" %%i in ('dir /ad /b 2^>nul') do (
for /f "delims=" %%j in ('dir /ad /b "%%i" 2^>nul') do (
echo "%CD%\%%i\%%j"
)
))>list.txt
echo---------------------------------------------
echo已写入到 list.txt 文件
echo---------------------------------------------
pause
bat 是世界上最快捷方便的效率工具。
支持{:301_997:} 值得收藏。 积少成多, 继续努力 bat和pwsh一比属实一坨 bat的脚本可以写入到VB.NET么? namejm 发表于 2024-4-22 12:51
感觉楼主的代码还可以再优化一下:
1、获取当前文件夹路径没必要放在 for 语句中处理,直接用 %cd% 获取即 ...
这代码确实精简,一看就是老手。
虽然还能再少两层括号,但那样就失去易读性了 namejm 发表于 2024-4-22 12:51
感觉楼主的代码还可以再优化一下:
1、获取当前文件夹路径没必要放在 for 语句中处理,直接用 %cd% 获取即 ...
感谢指导与优化,对BAT脚本,我不是很精通哈。 eenny820 发表于 2024-4-22 13:22
bat的脚本可以写入到VB.NET么?
可以内嵌