标题: [ 新手练习 8 ] 批处理计算拖放文件数 [打印本页]
作者: wxcute 时间: 2008-12-10 11:20 标题: [ 新手练习 8 ] 批处理计算拖放文件数
将一个文件(或目录)拖放到批处理图标上,这个文件的完整路径将被做为参数 %1。
现在我们来思考一下,如果拖入的文件不止一个,怎么来计算到底拖放了几个文件呢?- ::示例
- @echo off
- echo 完整路径:%1
- echo 文件全名:%~nx1
- pause
复制代码
提示:可能用到 shift 或者 for,也可能二者兼用。
要求:显示拖放到批处理上的文件的数目。
方法不限。
评分:代码可读性 1 分;
首个新方法 7 分,第二个 5 分,依次类推,最少 3 分;
一人可多种方法,新方法追加 3 分,已经出现过的方法追加 1 分。
作者: rat 时间: 2008-12-10 13:16
@(for %%a in (%*)do @set/an+=1)&call echo.%%n%%&pause
作者: tireless 时间: 2008-12-10 13:50
- @echo off
- :loop
- shift
- if "%~0" neq "" set /a "n+=1" & goto loop
- echo 拖入了 %n% 个文件。
- pause
复制代码
作者: lhjoanna 时间: 2008-12-11 19:27
建议:如果不是新手,还是迟些公布自己的答案,给大家个思考的机会啊。也建议如果是新手,不管自己的代码有多粗糙,尽量还是贴出来,毕竟是自己思考的结果,并且还能得到大家的指导。
作者: RiceFans 时间: 2008-12-21 09:11
@echo off&setlocal EnableDelayedExpansion
del /f/q temp.txt >nul 2>nul
echo 文件列表: ::::请直接把文件拖到图标上::::
:a
set "a=%~1"
if not defined a goto b
echo %~f1>>temp.txt
shift /1
goto :a
:b
set b=0
for /f "tokens=*" %%i in (temp.txt) do (
set /a b+=1
echo "%%i"
)
echo 共拖入!b!个文件或文件夹
pause>nul
作者: firewolf85 时间: 2008-12-21 11:07
经测试,上面兄弟们的方法最大支持文件数目都是65个
是否可以说明允许访问的%*最大就是%64呢??
作者: wxcute 时间: 2008-12-21 11:43 标题: 回复 6楼 的帖子
怎么会呢?是什么测试环境?我这儿是 XP SP3,没有你说的那种情况。
请列出测试环境。
作者: tireless 时间: 2008-12-21 12:44
发现也不一定是多少个 ——
我从 system32 下可以拖入 66 个文件;
我又试着新建一个文件夹,里面新建 1.txt ~200.txt,测试可以拖入 1.txt ~ 86.txt (共86个)、可以拖入 87.txt ~ 168.txt (共82个);
我又新建一文件夹,里面新建 1 ~ 100,可以拖入 1 - 79 (共79个)
......
测试环境: XP SP2 中文版
[ 本帖最后由 tireless 于 2008-12-21 13:10 编辑 ]
作者: wxcute 时间: 2008-12-21 13:03
可能与 %* 代表的字串总长度有关。现在发现 SP3 文件多了以后也会有问题,且数目不确定。
作者: sylovanas 时间: 2008-12-21 23:16
和单行字元总长度不知有无关系?
另外@()内的行数不知是否能使用超过10300行
作者: leaparde 时间: 2008-12-30 10:11
提个建议,高手发代码的时候能不能加上注解呢??
新手看高手的代码还是很吃力的,当然,可以自己不停的翻资料。但是总觉得没有注解的代码似乎缺了点什么!
作者: wxcute 时间: 2008-12-30 11:12
教科书的注解颇多,为何总是提不起人们的兴趣。
我想是留给人想象的空间太小了。
作者: leaparde 时间: 2008-12-30 12:30
受教了,虚心学习……
作者: myzwd 时间: 2009-3-1 22:16 标题: 回复 11楼 的帖子
我部分支持你的说法,编程靠的是思路,所以发代码是注释一下思路,是最好的了。
作者: myzwd 时间: 2009-3-1 22:56 标题: 回复 1楼 的帖子
-
- @echo off
- cls
- set /a n=-2
- call:one *.*
- :one
- set /a n+=1
- echo.**NAME******PATH**************TOTAL
- echo.%~nx1-----%~dpf1-----%n%
- shift
- if "%~nx0" neq "" goto one
- pause
复制代码
------------------------------------------------
我来到这个论坛 是因为这里的题目 太有趣了,我不喜欢那些长篇的大程序,看起来头痛。而这里的新手练功区,
程序都不大,可以学到不少东西。
学习批处理其根本原因在于方便,每一台电脑都可以运行。
其实学习难道挺大的。
[ 本帖最后由 myzwd 于 2009-3-1 23:09 编辑 ]
作者: Batcher 时间: 2009-3-2 11:33 标题: 回复 15楼 的帖子
其实要做到“每一台电脑都可以运行”,还是考虑很多情况的,并不是一件容易的事情。
作者: BHsolve 时间: 2013-12-29 17:19
本帖最后由 BHsolve 于 2013-12-29 17:20 编辑
- @echo off
- set /a n=-1
- :loop
- shift
- set /a n+=1
- if exist "%~nx0" (
- goto loop
- )else (
- goto end
- )
- :end
- echo 拖入%n%个文件
- pause
复制代码
查错花了好长时间
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |