中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 怎样从外部获得多个变量来支持多文件?已解决
作者:
标题: 怎样从外部获得多个变量来支持多文件?已解决 上一主题 | 下一主题
echo
初级用户





积分 148
发帖 69
注册 2006-11-23
状态 离线
『楼 主』:  怎样从外部获得多个变量来支持多文件?已解决

@echo off if not exist "f:\备份" md "f:\备份" :start if not "%~1"=="" ( move "%~1" f:\备份\ shift goto :start) pause>nul 引用2楼兄台的代码,测试过,支持拖放操作,已经很好地解决了我前面提出的问题:(目前只能支持单文件,而且文件名不能有空格,不知道如何改进才能支持多文件(多于9个),而且不受空格的影响,我把%1改成"%1"提示说命令语法不支持。),但测试后发现不支持文件夹,不知道该怎么样完善下? 可能我前面没说清楚,不好意思,其实我是想把这个P放到SENDTO里头来用,或者直接将多个文件拖放到这个P上来操作 大虾门帮忙看看。。。:lol: [ Last edited by echo on 2006-12-12 at 04:50 PM ]


2006-12-12 01:42
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
youxi01
高级用户




积分 846
发帖 247
注册 2006-10-27
来自 湖南==》广东
状态 离线
『第 2 楼』:  

试试以下的代码,支持多个文件,支持拖放,但是对于具有重复名的文件,在移动过程中进行覆盖且不提示!!!有需要的话自己改进!!!
@echo off
if not exist "f:\备份" md "f:\备份"

:start 
  if not "%~1"=="" (
     move "%~1" f:\备份\
     shift
     goto :start)
pause>nul


   此帖被 +7 点积分      点击查看详情   
评分人:【 echo 分数: +2  时间:2006-12-12 23:42
评分人:【 redtek 分数: +5  时间:2006-12-12 23:43


2006-12-12 05:48
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
NaturalJ0
银牌会员




积分 1181
发帖 533
注册 2006-8-14
状态 离线
『第 3 楼』:  

输入时你加上引号,传进去后去掉再用,如果要超过 9 个,应该要用 shift 。


2006-12-12 06:05
查看资料  发短消息  网志   编辑帖子  回复  引用回复
youxi01
高级用户




积分 846
发帖 247
注册 2006-10-27
来自 湖南==》广东
状态 离线
『第 4 楼』:  

TO :楼上,楼主出现的问题主要不是引号的问题,而是空格的问题,应该!


2006-12-12 06:29
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
3742668
荣誉版主





积分 2013
发帖 718
注册 2006-2-18
状态 离线
『第 5 楼』:  

@echo off
    call :print %*
exit /b 0

:print
    for %%i in (%*) do echo,%%~i
goto :eof
不明白为什么一定要call调用?
@echo off
    md D:\备份 2>nul
    for %%i in (%*) do move …………
注意参数包含空格的要加引号。


   此帖被 +11 点积分       点击查看详情   
评分人:【 youxi01 分数: +4  时间:2006-12-12 10:54
评分人:【 redtek 分数: +5  时间:2006-12-12 23:44
评分人:【 echo 分数: +2  时间:2006-12-12 23:44


2006-12-12 10:29
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
youxi01
高级用户




积分 846
发帖 247
注册 2006-10-27
来自 湖南==》广东
状态 离线
『第 6 楼』:  

斑竹的代码真是极尽简洁之能啊!羡慕!!!


2006-12-12 10:57
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
sea2moon
初级用户





积分 47
发帖 23
注册 2006-9-27
状态 离线
『第 7 楼』:  

请问 @echo off md D:\备份 2>nul for %%i in (%*) do move ………… 中的, %* 相不相当于 *.* ?


2006-12-12 11:11
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
namejm
荣誉版主

batch fan


积分 5226
发帖 1737
注册 2006-3-10
来自 成都
状态 离线
『第 8 楼』:  

  %* 表示 call 语句所引用的所有参数,和 *.* 完全不一样。


   此帖被 +2 点积分    点击查看详情   
评分人:【 echo 分数: +2  时间:2006-12-12 23:53




尺有所短,寸有所长,学好CMD没商量。 考虑问题复杂化,解决问题简洁化。
2006-12-12 11:15
查看资料  发短消息  网志   编辑帖子  回复  引用回复
3742668
荣誉版主





积分 2013
发帖 718
注册 2006-2-18
状态 离线
『第 9 楼』:  

Originally posted by youxi01 at 2006-12-12 10:57: 斑竹的代码真是极尽简洁之能啊!羡慕!!!
要想代码好,if尽量少;要想代码壮,引号括号两边放。 你也不用妄自菲薄,你的代码也是本论坛中比较有创造性的之一。


2006-12-12 11:47
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
echo
初级用户





积分 148
发帖 69
注册 2006-11-23
状态 离线
『第 10 楼』:  

谢谢各位,学习了,我上面可能没说清楚 我是想它支持拖放操作,即将多个文件直接拖到这个P上进行处理,或者把这个P放到SENDTO里,这样比较省心! 上面没说清楚,不好意思,谢谢大家 [ Last edited by echo on 2006-12-12 at 11:13 AM ]


2006-12-12 23:35
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
echo
初级用户





积分 148
发帖 69
注册 2006-11-23
状态 离线
『第 11 楼』:  

Originally posted by youxi01 at 2006-12-11 04:48 PM: 试试以下的代码,支持多个文件,支持拖放,但是对于具有重复名的文件,在移动过程中进行覆盖且不提示!!!有需要的话自己改进!!! [code] @ ...
你明白了我的意思,呵呵,代码我测试过 支持拖放操作,支持空格文件名和多于九个文件,太棒了!!! 谢谢你,谢谢大家! [ Last edited by echo on 2006-12-12 at 11:13 AM ]


2006-12-12 23:40
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
kcdsw
中级用户





积分 404
发帖 179
注册 2006-3-30
状态 离线
『第 12 楼』:  

用了至少半年了,你自己改改. 还没见到不支持的文件或者文件夹 参数不限!(超过9个文件 or 文件夹 or 文件+文件夹) 我把这个批处理做了个快捷方式(可以最小化运行) 一个放在桌面 一个放在sendto 相当的节省时间!
@echo off

REM 分析当天日期
For /F "tokens=1" %%a in ('date/t') do set Day=F:\print\%%a
REM 如果不存在%day% 则创建!
if not exist %day% Md %day%

:o
REM 如果没有参数则打开%day%文件夹,并且退出程序(如双击,用来查看里面都有些什么文件了!)
if [%1]==[] start explorer %DAY% & exit
REM 检查这个路径是文件,还是文件夹
dir %1\. >nul 2>nul && goto Folder

REM 如果是文件,则执行以下命令
echo.
echo 正在移动%~1,请稍候!
title 移动"%~nx1"中,请稍候!

move %1 %day%

:shift
REM 检测当前参数的下一个参数是否为空,是则跳出程序!
If %2#==# exit
Shift
goto o

:Folder
REM 如果是文件夹,执行以下命令
set Folder="%day%\%~nx1"
md %Folder% && xcopy /y /s /i %1 %Folder% && rd  /s /q %1
goto shift
[ Last edited by kcdsw on 2006-12-13 at 03:43 AM ]


   此帖被 +7 点积分      点击查看详情   
评分人:【 redtek 分数: +5  时间:2006-12-13 04:42
评分人:【 echo 分数: +2  时间:2006-12-14 01:52


2006-12-13 03:23
查看资料  发短消息  网志   编辑帖子  回复  引用回复
echo
初级用户





积分 148
发帖 69
注册 2006-11-23
状态 离线
『第 13 楼』:  

先顶再看,看起来正合我意,谢谢 我顶! 确实不错,今天不能给你评分了,限制了,明天吧,以后有好东西多拿出来共享哦! [ Last edited by echo on 2006-12-12 at 03:38 PM ]


2006-12-13 04:34
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
kcdsw
中级用户





积分 404
发帖 179
注册 2006-3-30
状态 离线
『第 14 楼』:  

呵呵 我这个程序是每天工作都用的 目的就是为了把要处理的文件放到 以当日日期为名的文件夹中 以保证服务器能从这里取到文件.(因为,如果都放在一个目录里,容易出现重名,或者文件过多,服务器响应慢) 然后需要支持所有可能性(文件已打开除外) 1.右键sendto 2.拖放 3.方便查看 4.支持文件夹 5.移除原文件 另外 为了方便我操作.我在其快捷方式中设置了快捷键.一按立刻就打开了当天的文件夹. 我觉得完全是利用了系统的很多其他功能 才使得这个批处理用起来感觉是那么那么的好 比如:sendto , 快捷键 , 最小化运行 等等等等 所以我觉得这个东西其实很适合你拿回去做备份 这个日期为名的文件夹形式可以保留一下 只需要改动目标文件夹. [ Last edited by kcdsw on 2006-12-13 at 04:45 AM ]


   此帖被 +2 点积分    点击查看详情   
评分人:【 echo 分数: +2  时间:2006-12-14 01:53


2006-12-13 04:42
查看资料  发短消息  网志   编辑帖子  回复  引用回复
echo
初级用户





积分 148
发帖 69
注册 2006-11-23
状态 离线
『第 15 楼』:  

Originally posted by kcdsw at 2006-12-12 03:42 PM: 呵呵 我这个程序是每天工作都用的 目的就是为了把要处理的文件放到 以当日日期为名的文件夹中 以保证服务器能从这里取到文件.(因为,如果都放 ...
刚刚测试过,真是太爽了,哈哈,我就不说了。。。 看来大家都各自藏着些好宝贝哦! 学习、受教、受用了,谢谢!:P [ Last edited by echo on 2006-12-12 at 03:53 PM ]


2006-12-13 04:48
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: