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

[文件操作] 批处理获取指定文件夹下文件名与大小并输出到文本?

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 编辑 ]

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 的大写变量名
比较易读,而且避免与不分大小写的组合键混淆。
@set,=学无止境
@for /l %%b in (0,1,6) do @call set/p= %%,:~%%b,1%%<nul

TOP

  要获取所有子目录中的文件,需要给 dir 命令加上 /s 参数。
尺有所短寸有所长,学好批处理没商量;
考虑问题复杂化,解决问题简洁化。

心在天山,身老沧州。

TOP

用的 /S 后 会搜寻整个C盘文件~!时间太长。。我只是想获取 C盘跟目录下的文件~!

TOP

该用什么参数啊~!~!~!!!!!!!!!!!

TOP

看看是不是这样
@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
@set,=学无止境
@for /l %%b in (0,1,6) do @call set/p= %%,:~%%b,1%%<nul

TOP

@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

就想把最上面的批处理 有 下面那个输出的文本的效果

TOP

原帖由 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盘的了

TOP

  1. @echo off
  2. for %%a in (c:\*.*) do echo %%a %%~za
  3. pause
复制代码
技术问题请到论坛发帖求助!

TOP

原帖由 随风 于 2008-5-11 11:47 发表
@echo off
for %%a in (c:\*.*) do echo %%a %%~za
pause

  这个代码对c盘根目录下的隐藏文件就没法了,增强一下:
  1. @echo off
  2. for /f "delims=" %%i in ('dir /a-d /b c:\') do echo "%%i"的大小为%%~zi
  3. pause
复制代码
尺有所短寸有所长,学好批处理没商量;
考虑问题复杂化,解决问题简洁化。

心在天山,身老沧州。

TOP

原帖由 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 编辑 ]

TOP

怎么只获取2个文本的大小啊
"ARP2.bat"的大小为99
“date.txt"的大小为163

TOP

  嘿嘿,忘记添加绝对路径了,这下可以了:
  1. @echo off
  2. for /f "delims=" %%i in ('dir /a-d /b c:\') do (
  3.     for %%j in ("c:\%%i") do echo %%j 的大小为 %%~zj
  4. )
  5. pause
复制代码
尺有所短寸有所长,学好批处理没商量;
考虑问题复杂化,解决问题简洁化。

心在天山,身老沧州。

TOP

OK了~!

谢谢个位帮忙啊~!~!~!
赶紧去忙了

TOP

返回列表