找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 37522|回复: 16

[ 新手练习 8 ] 批处理计算拖放文件数

[复制链接]
发表于 2008-12-10 11:20:02 | 显示全部楼层 |阅读模式
将一个文件(或目录)拖放到批处理图标上,这个文件的完整路径将被做为参数 %1。
现在我们来思考一下,如果拖入的文件不止一个,怎么来计算到底拖放了几个文件呢?
  1. ::示例
  2. @echo off
  3. echo 完整路径:%1
  4. echo 文件全名:%~nx1
  5. pause
复制代码
提示:可能用到 shift 或者 for,也可能二者兼用。

要求:显示拖放到批处理上的文件的数目。
   方法不限。

评分:代码可读性 1 分;
   首个新方法 7 分,第二个 5 分,依次类推,最少 3 分;
   一人可多种方法,新方法追加 3 分,已经出现过的方法追加 1 分。
发表于 2008-12-10 13:16:31 | 显示全部楼层
@(for %%a in (%*)do @set/an+=1)&call echo.%%n%%&pause

评分

参与人数 1PB +3 收起 理由
wxcute + 3 精彩!(版主一律只得3分,见谅)

查看全部评分

发表于 2008-12-10 13:50:49 | 显示全部楼层
  1. @echo off
  2. :loop
  3. shift
  4. if "%~0" neq "" set /a "n+=1" & goto loop
  5. echo 拖入了 %n% 个文件。
  6. pause
复制代码

评分

参与人数 1PB +8 收起 理由
wxcute + 8 好,shift 也有方案了

查看全部评分

发表于 2008-12-11 19:27:32 | 显示全部楼层
建议:如果不是新手,还是迟些公布自己的答案,给大家个思考的机会啊。也建议如果是新手,不管自己的代码有多粗糙,尽量还是贴出来,毕竟是自己思考的结果,并且还能得到大家的指导。
发表于 2008-12-21 09:11:13 | 显示全部楼层
@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

评分

参与人数 1PB +7 收起 理由
wxcute + 7 很好

查看全部评分

发表于 2008-12-21 11:07:09 | 显示全部楼层
经测试,上面兄弟们的方法最大支持文件数目都是65个
是否可以说明允许访问的%*最大就是%64呢??

评分

参与人数 1PB +2 收起 理由
tireless + 2 果然是

查看全部评分

 楼主| 发表于 2008-12-21 11:43:50 | 显示全部楼层

回复 6楼 的帖子

怎么会呢?是什么测试环境?我这儿是 XP SP3,没有你说的那种情况。
请列出测试环境。
发表于 2008-12-21 12:44:09 | 显示全部楼层
发现也不一定是多少个 ——

我从 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 编辑 ]
 楼主| 发表于 2008-12-21 13:03:17 | 显示全部楼层
可能与 %* 代表的字串总长度有关。现在发现 SP3 文件多了以后也会有问题,且数目不确定。
发表于 2008-12-21 23:16:06 | 显示全部楼层
和单行字元总长度不知有无关系?
另外@()内的行数不知是否能使用超过10300行
发表于 2008-12-30 10:11:22 | 显示全部楼层
提个建议,高手发代码的时候能不能加上注解呢??
新手看高手的代码还是很吃力的,当然,可以自己不停的翻资料。但是总觉得没有注解的代码似乎缺了点什么!
 楼主| 发表于 2008-12-30 11:12:55 | 显示全部楼层
教科书的注解颇多,为何总是提不起人们的兴趣。
我想是留给人想象的空间太小了。
发表于 2008-12-30 12:30:50 | 显示全部楼层
受教了,虚心学习……
发表于 2009-3-1 22:16:57 | 显示全部楼层

回复 11楼 的帖子

我部分支持你的说法,编程靠的是思路,所以发代码是注释一下思路,是最好的了。
发表于 2009-3-1 22:56:03 | 显示全部楼层

回复 1楼 的帖子


  1. @echo off
  2. cls
  3. set /a n=-2
  4. call:one *.*
  5. :one
  6. set /a n+=1
  7. echo.**NAME******PATH**************TOTAL
  8. echo.%~nx1-----%~dpf1-----%n%
  9. shift
  10. if "%~nx0" neq "" goto one
  11. pause
复制代码


------------------------------------------------
  我来到这个论坛 是因为这里的题目 太有趣了,我不喜欢那些长篇的大程序,看起来头痛。而这里的新手练功区,
程序都不大,可以学到不少东西。
学习批处理其根本原因在于方便,每一台电脑都可以运行。
其实学习难道挺大的。

[ 本帖最后由 myzwd 于 2009-3-1 23:09 编辑 ]

评分

参与人数 1PB +3 收起 理由
batman + 3 说得好!

查看全部评分

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 03:54 , Processed in 0.024277 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表