中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-08-10 15:57
47,811 主题排行 / 349,897 发帖 / 今日 0 篇 / 48,255 会员排行
DOS批处理 & 脚本技术(批处理室) » 【求助】如何获得当前目录中文件大小最大的文件的名字
可打印版本  1,647 / 14
第1楼 bugmenot 发表于 2007-04-24 08:59
新手上路 发帖 6 积分 14
【求助】如何获得当前目录中文件大小最大的文件的名字
我想获得当前目录中文件大小最大的文件的名字。

为什么for中的set没有执行到啊?
谢谢。
第2楼 bjsh 发表于 2007-04-24 09:35
银牌会员 发帖 621 积分 2,000
首先 for要用单一字母来表示变量
所以%%2是不对的;而要使用%%i等字母

set "filesize=%%~za"

不要加不必要的空格;

set t = 1 是赋不了值的;需要 set t=1;
(但是 set /a t = 1 却是可以赋值的;)
为了避免不必要的空格;尽量养成
set "t=1" 加引号的习惯;

还有就是变量延迟的问题;

for在执行过程中会把其中的环境变量先替换为 其对应的值;

也就是说 for 在执行的时候是

for %%i in (*.exe) do if 0 LSS %%~z2 set "filesize=%%~z2" & echo %%i > exefilelist.txt

标记处是不变的;一直为常数0;而不会随着filesize的重定义而改变;

此时就需要用到变量延迟;以使得%filesize%不是在开始时就赋值;而是随着程序的执行而改变;

关于变量延迟的详细可以搜索旧贴;

所以正确代码如下



  1. @echo off &setlocal enabledelayedexpansion
  2. set /a "filesize=0"
  3. for %%i in (*.bat) do if !filesize! lss %%~zi set "filesize=%%~zi" & echo %%i >exefilelist.txt
BJSH发表于: 2007-04-23 20:22
第3楼 bugmenot 发表于 2007-04-24 09:38
新手上路 发帖 6 积分 14
非常感谢!
java 用贯了。哈哈。
第4楼 bugmenot 发表于 2007-04-24 10:36
新手上路 发帖 6 积分 14
又有新的问题了,怎样排出某个(某些)特定的文件?(比如:Unwiz.exe, Un2install.exe)
感激。
第5楼 bjsh 发表于 2007-04-24 11:33
银牌会员 发帖 621 积分 2,000
@echo off &setlocal enabledelayedexpansion
set /a "filesize=0"
for %%i in (*.exe) do
(
if "%%i"=="Unwiz.exe" goto end
if "%%i"=="Un2install.exe" goto end
if !filesize! lss %%~zi set "filesize=%%~zi" & echo %%i >exefilelist.txt
:end
)
第6楼 lxmxn 发表于 2007-04-24 12:06
版主 发帖 4,938 积分 11,386
还可以利用dir的/o参数来实现楼主最初的想法。


[ Last edited by lxmxn on 2007-4-24 at 01:14 AM ]
第7楼 lxmxn 发表于 2007-04-24 12:17
版主 发帖 4,938 积分 11,386
To bjsh:

测试了一下5楼的代码,提示命令语法不正确,我想原因是for命令内部不允许使用标签。

我又用"for /l"写了个简单的批处理来测试for命令内部使用标签的情况,仍然提示命令语法错误。


第8楼 bjsh 发表于 2007-04-24 12:35
银牌会员 发帖 621 积分 2,000
确实;谢lxmxn指正;
现修改代码如下
@echo off &setlocal enabledelayedexpansion
set /a "filesize=0"
for %%i in (*.exe) do
(
if "%%i"=="Unwiz.exe" set "w=1"
if "%%i"=="Un2install.exe" set "w=1"
if not defined w if !filesize! lss %%~zi set "filesize=%%~zi" & echo %%i >exefilelist.txt
set "w="
)

[ Last edited by bjsh on 2007-4-23 at 11:36 PM ]
第9楼 dikex 发表于 2007-04-24 13:54
高级用户 发帖 366 积分 788
感觉还是使用dir来完成的效率较高,不过6楼的dir的参数貌似错了,变成了按日期排列-_-

发一个加上了排除的
第10楼 lxmxn 发表于 2007-04-24 14:14
版主 发帖 4,938 积分 11,386
Originally posted by dikex at 2007-4-24 00:54:
感觉还是使用dir来完成的效率较高,不过6楼的dir的参数貌似错了,变成了按日期排列-_-

不好意思,又笔误了。

多谢兄细心的观察,代码已经修正。
第11楼 bugmenot 发表于 2007-04-24 21:33
新手上路 发帖 6 积分 14
非常感谢大家的回答。

本来是想注册个马甲问完问题就闪~看来要好好来这里学学dos了~哈哈
第12楼 bugmenot 发表于 2007-04-24 21:35
新手上路 发帖 6 积分 14
继续出难题:
如果我想排除 un 开头的所有 exe 呢?
第13楼 bugmenot 发表于 2007-04-24 21:40
新手上路 发帖 6 积分 14
系统提示:对不起,您最近 24 小时评分数超过 2 点 限制,请返回。

今天不能给大家的帖子一一评分了。
:)
第14楼 lililulula 发表于 2007-04-24 23:32
中级用户 发帖 138 积分 302
呵呵 前面看到lxmxn兄还是铂金,一下子荣升斑竹,恭喜恭喜,还有就是bjsh兄终于修成正果,特来祝贺.
不过我来这里关键是学习的,所以特问有没有有关dir参数的贴子以供学习.
第15楼 dikex 发表于 2007-04-24 23:44
高级用户 发帖 366 积分 788
Originally posted by bugmenot at 2007-4-24 08:35 AM:
继续出难题:
如果我想排除 un 开头的所有 exe 呢?


修改一下使用findstr命令应该就可以了

[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023