标题: [文件操作] 批处理获取指定文件夹下文件名与大小并输出到文本? [打印本页]
作者: wangplay163 时间: 2008-5-11 10:06 标题: 批处理获取指定文件夹下文件名与大小并输出到文本?
for /f "delims=" %%a in ('dir /b/a-d/oN *.*') do echo %%a %%~za >> c:\date.txt
我想用这个批处理想获取C盘下的文件名与大小输出到文本。
但是这个只能放在C盘跟目录下才能获取到 文件的大小。放在其他目录下只能获取文件名,
还有 %%~za是获取大小的意思?
能否大概介绍下%%~的用法
[ 本帖最后由 wangplay163 于 2008-5-12 11:04 编辑 ]
作者: fml520 时间: 2008-5-11 10:55
FOR 变量参照的替换已被增强。您现在可以使用下列
选项语法:
~I - 删除任何引号("),扩充 %I
%~fI - 将 %I 扩充到一个完全合格的路径名
%~dI - 仅将 %I 扩充到一个驱动器号
%~pI - 仅将 %I 扩充到一个路径
%~nI - 仅将 %I 扩充到一个文件名
%~xI - 仅将 %I 扩充到一个文件扩展名
%~sI - 扩充的路径只含有短名
%~aI - 将 %I 扩充到文件的文件属性
%~tI - 将 %I 扩充到文件的日期/时间
%~zI - 将 %I 扩充到文件的大小
%~$PATH:I - 查找列在路径环境变量的目录,并将 %I 扩充
到找到的第一个完全合格的名称。如果环境变量名
未被定义,或者没有找到文件,此组合键会扩充到
空字符串
可以组合修饰符来得到多重结果:
%~dpI - 仅将 %I 扩充到一个驱动器号和路径
%~nxI - 仅将 %I 扩充到一个文件名和扩展名
%~fsI - 仅将 %I 扩充到一个带有短名的完整路径名
%~dp$PATH:i - 查找列在路径环境变量的目录,并将 %I 扩充
到找到的第一个驱动器号和路径。
%~ftzaI - 将 %I 扩充到类似输出线路的 DIR
在以上例子中,%I 和 PATH 可用其他有效数值代替。%~ 语法
用一个有效的 FOR 变量名终止。选取类似 %I 的大写变量名
比较易读,而且避免与不分大小写的组合键混淆。
作者: namejm 时间: 2008-5-11 10:58
要获取所有子目录中的文件,需要给 dir 命令加上 /s 参数。
作者: wangplay163 时间: 2008-5-11 11:19
用的 /S 后 会搜寻整个C盘文件~!时间太长。。我只是想获取 C盘跟目录下的文件~!
作者: wangplay163 时间: 2008-5-11 11:19
该用什么参数啊~!~!~!!!!!!!!!!!
作者: fml520 时间: 2008-5-11 11:25
看看是不是这样
@echo off
for /r c:\ %%a in (.) do (pushd "%%~fa"
for /f "delims=" %%i in ('dir /x/b/a-d/oN *.*') do echo 文件名"%%~nxi" 大小"%%~zi" >> c:\date.txt
)
pause
作者: wangplay163 时间: 2008-5-11 11:44
@echo on
for /f "delims=" %%a in ('dir /b/a-d/oN c:\*.*') do echo %%a %%~za >>date.txt
pause
我在这加了路径 后
输出的文档:
ARP2.bat 94
AUTOEXEC.BAT
boot.ini
bootbak.ini
bootfont.bin
CONFIG.SYS
date.txt 87
FFAST500.FF_
IO.SYS
MSDOS.SYS
mxldr
NTDETECT.COM
ntldr
pagefile.sys
sqmdata00.sqm
sqmnoopt00.sqm
VPLII.SYS
VULII.SYS
想要每个文件的大小都出来,就想这样的效果
@echo on
for /f "delims=" %%a in ('dir /b/a-d/oN *.*') do echo %%a %%~za >>date.txt
pause
这个是放在C盘根目录下的
输出的文本:
ARP2.bat 91
ARP21.bat 95
AUTOEXEC.BAT 0
boot.ini 233
bootbak.ini 211
bootfont.bin 322730
CONFIG.SYS 0
FFAST500.FF_ 61728
IO.SYS 0
MSDOS.SYS 0
mxldr 186108
NTDETECT.COM 47564
ntldr 257200
pagefile.sys
sqmdata00.sqm 268
sqmnoopt00.sqm 244
VPLII.SYS 0
VULII.SYS 0
就想把最上面的批处理 有 下面那个输出的文本的效果
作者: wangplay163 时间: 2008-5-11 11:45
原帖由 fmr520 于 2008-5-11 11:25 发表
看看是不是这样
@echo off
for /r c:\ %%a in (.) do (pushd "%%~fa"
for /f "delims=" %%i in ('dir /x/b/a-d/oN *.*') do echo 文件名"%%~nxi" 大小"%%~zi" >> c:\date.txt
)
pause
谢谢你给的批处理
但是还是不是获取根目录的。而是获取整个C盘的了
作者: 随风 时间: 2008-5-11 11:47
- @echo off
- for %%a in (c:\*.*) do echo %%a %%~za
- pause
复制代码
作者: namejm 时间: 2008-5-11 11:56
原帖由 随风 于 2008-5-11 11:47 发表
@echo off
for %%a in (c:\*.*) do echo %%a %%~za
pause
这个代码对c盘根目录下的隐藏文件就没法了,增强一下:
- @echo off
- for /f "delims=" %%i in ('dir /a-d /b c:\') do echo "%%i"的大小为%%~zi
- pause
复制代码
作者: wangplay163 时间: 2008-5-11 11:58
原帖由 namejm 于 2008-5-11 11:56 发表
这个代码对c盘根目录下的隐藏文件就没法了,增强一下:
@echo off
for /f "delims=" %%i in ('dir /a-d /b c:\') do echo "%%i"的大小为%%~zi
pause
执行后效果:
"ARP2.bat"的大小为99
"ARP21.bat"的大小为
"AUTOEXEC.BAT"的大小为
"boot.ini"的大小为
"bootbak.ini"的大小为
"bootfont.bin"的大小为
"CONFIG.SYS"的大小为
"date.txt"的大小为163
"FFAST500.FF_"的大小为
"IO.SYS"的大小为
"MSDOS.SYS"的大小为
"mxldr"的大小为
"NTDETECT.COM"的大小为
"ntldr"的大小为
"pagefile.sys"的大小为
"sqmdata00.sqm"的大小为
"sqmnoopt00.sqm"的大小为
"VPLII.SYS"的大小为
"VULII.SYS"的大小为
[ 本帖最后由 wangplay163 于 2008-5-11 12:07 编辑 ]
作者: wangplay163 时间: 2008-5-11 12:06
怎么只获取2个文本的大小啊
"ARP2.bat"的大小为99
“date.txt"的大小为163
作者: namejm 时间: 2008-5-11 12:08
嘿嘿,忘记添加绝对路径了,这下可以了:- @echo off
- for /f "delims=" %%i in ('dir /a-d /b c:\') do (
- for %%j in ("c:\%%i") do echo %%j 的大小为 %%~zj
- )
- pause
复制代码
作者: wangplay163 时间: 2008-5-11 12:14
OK了~!
谢谢个位帮忙啊~!~!~!
赶紧去忙了
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |