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

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

将一个文件(或目录)拖放到批处理图标上,这个文件的完整路径将被做为参数 %1。
现在我们来思考一下,如果拖入的文件不止一个,怎么来计算到底拖放了几个文件呢?
  1. ::示例
  2. @echo off
  3. echo 完整路径:%1
  4. echo 文件全名:%~nx1
  5. pause
复制代码
提示:可能用到 shift 或者 for,也可能二者兼用。

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

评分:代码可读性 1 分;
   首个新方法 7 分,第二个 5 分,依次类推,最少 3 分;
   一人可多种方法,新方法追加 3 分,已经出现过的方法追加 1 分。

@(for %%a in (%*)do @set/an+=1)&call echo.%%n%%&pause
1

评分人数

    • wxcute: 精彩!(版主一律只得3分,见谅)PB + 3

TOP

  1. @echo off
  2. :loop
  3. shift
  4. if "%~0" neq "" set /a "n+=1" & goto loop
  5. echo 拖入了 %n% 个文件。
  6. pause
复制代码
1

评分人数

    • wxcute: 好,shift 也有方案了PB + 8

TOP

建议:如果不是新手,还是迟些公布自己的答案,给大家个思考的机会啊。也建议如果是新手,不管自己的代码有多粗糙,尽量还是贴出来,毕竟是自己思考的结果,并且还能得到大家的指导。

TOP

@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
1

评分人数

TOP

经测试,上面兄弟们的方法最大支持文件数目都是65个
是否可以说明允许访问的%*最大就是%64呢??
1

评分人数

TOP

回复 6楼 的帖子

怎么会呢?是什么测试环境?我这儿是 XP SP3,没有你说的那种情况。
请列出测试环境。

TOP

发现也不一定是多少个 ——

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

TOP

可能与 %* 代表的字串总长度有关。现在发现 SP3 文件多了以后也会有问题,且数目不确定。

TOP

和单行字元总长度不知有无关系?
另外@()内的行数不知是否能使用超过10300行

TOP

提个建议,高手发代码的时候能不能加上注解呢??
新手看高手的代码还是很吃力的,当然,可以自己不停的翻资料。但是总觉得没有注解的代码似乎缺了点什么!

TOP

教科书的注解颇多,为何总是提不起人们的兴趣。
我想是留给人想象的空间太小了。

TOP

受教了,虚心学习……

TOP

回复 11楼 的帖子

我部分支持你的说法,编程靠的是思路,所以发代码是注释一下思路,是最好的了。

TOP

回复 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 编辑 ]
1

评分人数

TOP

返回列表