无忧启动论坛

标题: [求助]批处理中%1 %2是 什么意思? [打印本页]

作者: fzfchao    时间: 2006-5-9 09:15
标题: [求助]批处理中%1 %2是 什么意思?
以下是一个批处理的内容:
1 @echo off
2 title Starting opera ...
3 cd\
4 if not exist "%ProgramFiles%\Winrar\rar.exe" goto rar2
5 "%ProgramFiles%\winrar\rar.exe" x -o+ \programs\opera\opera.rar %temp%\ >nul 2>nul
6 if "%1"=="" goto run2
7 goto run
8 :rar2
9 %1\programs\winrar\rar.exe x -o+ \programs\opera\opera.rar %temp%\ >nul 2>nul
10 goto run
11 :run
12 cd /d %temp%\opera\
13 start opera.exe "%1" "%2"
14 goto exit
:run2
cd /d %temp%\opera\
start opera.exe
goto exit
:exit
exit
其中第9 %1\programs\winrar\rar.exe x -o+ \programs\opera\opera.rar %temp%\ >nul 2>nul的“%1”是表示什么意思?
  13 start opera.exe "%1" "%2"  中的"%1" "%2" 又是表示什么呢?

作者: bdfcy    时间: 2006-5-9 13:45
标题: [求助]批处理中%1 %2是 什么意思?
批处理的参数吧~
作者: fzfchao    时间: 2006-5-10 11:20
标题: [求助]批处理中%1 %2是 什么意思?
这几个参数的作用是什么呢?
作者: magictek    时间: 2006-5-11 14:23
标题: [求助]批处理中%1 %2是 什么意思?
是指批处理后面跟的参数
我们现在编辑一个很简单的批处理,比方说批处理名字叫xdir.bat
@echo off
dir %1 %2
如果你输入xdir /s /w,则此时%1就是/s参数,%2就是/w参数

讲解下这段:if "%1"=="" goto run2
也就是说如果批处理后面没有任何参数,也就是%1为空,则跳转到run2段

作者: magictek    时间: 2006-5-11 14:33
标题: [求助]批处理中%1 %2是 什么意思?
给你一点点讲一遍:
@echo off             ;关闭程序执行结果的显示
title Starting opera ...           ;这一行有误,要么在前面加上echo来显示这句话,要么在前面加上rem注解以下程序
cd\                        ;退回到根目录
if not exist "%ProgramFiles%\Winrar\rar.exe" goto rar2          ;如果不存在\%Pro..%\winrar\rar.exe"文件则跳转到run2段
"%ProgramFiles%\winrar\rar.exe" x -o+ \programs\opera\opera.rar %temp%\ >nul 2>nul                     ;解压缩opera.rar压缩包到%temp%目录下,并且不显示结果
if "%1"=="" goto run2         ;如果批处理后未跟任何参数则跳转到run2段
goto run                     ;跳转到run段
:rar2                    ;rar2段
%1\programs\winrar\rar.exe x -o+ \programs\opera\opera.rar %temp%\ >nul 2>nul         ;参数缩输入的盘符下的pro....路径下的rar解压缩opera.rar到%temp%目录下
goto run                ;跳转到run段
:run                   ;run段
cd /d %temp%\opera\              ;进入%temp%\opera\目录下,/d参数很重要,不仅可以转换目录,还可以连盘符都一起转换,如果该批处理不在C盘(默认情况下),如不加/d参数则会报错
start opera.exe "%1" "%2"                ;运行opera.exe,后跟%1 %2参数
goto exit              ;跳转到exit段
:run2                     ;run2段
cd /d %temp%\opera\             上面解释了
start opera.exe                 上面也解释了
goto exit                        同上
:exit                      ;exit段
exit                     ;退出cmd.exe

作者: magictek    时间: 2006-5-11 14:36
标题: [求助]批处理中%1 %2是 什么意思?
在默认情况下
%ProgramFiles%是指C:\Program Files
%temp%是指C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp
自己在cmd中输入set就可以看到个个变量了
作者: lfdjssz    时间: 2006-5-11 19:10
标题: [求助]批处理中%1 %2是 什么意思?
学习了............................
作者: 老毛桃    时间: 2006-5-13 09:33
标题: [求助]批处理中%1 %2是 什么意思?
呵呵,在这方面,美泰和葛老师都是专家
作者: fzfchao    时间: 2006-5-13 11:14
标题: [求助]批处理中%1 %2是 什么意思?
   谢谢版主的热心解答,%1和%2 的理解还是有点模糊,“%1就是/s参数,%2就是/w参数”,为什么%1就一定是/s参数呢,%2就一定是/w参数呢?是不是指命令的第一个参数和第二个参数?
作者: cjzzz    时间: 2006-5-19 13:37
标题: [求助]批处理中%1 %2是 什么意思?
C:\WINDOWS>shift /?
更改批处理文件中可替换参数的位置。
SHIFT [/n]
如果命令扩展名被启用,SHIFT 命令支持/n 命令行开关;该命令行开关告诉
命令从第 n 个参数开始移位;n 介于零和八之间。例如:
    SHIFT /2
会将 %3 移位到 %2,将 %4 移位到 %3,等等;并且不影响 %0 和 %1。
作者: magictek    时间: 2006-5-21 11:43
昨天回答了一下,怎么就不见了呐?可能是论坛正在转换吧,重新简单说一下

就是.....
比如说你编了一个批处理叫1.bat,里面只有一句:dir %1 %2 %3

如果你输入 1.bat  /x /y /z
则%1就是/x %2就是/y  %3就是/z
也就是你在批处理后面跟的参数可以"搬"到批处理内部来使用
作者: magictek    时间: 2006-5-21 11:44
原帖由 cjzzz 于 2006-5-19 01:37 PM 发表
C:\WINDOWS>shift /?
更改批处理文件中可替换参数的位置。
SHIFT
如果命令扩展名被启用,SHIFT 命令支持/n 命令行开关;该命令行开关告诉
命令从第 n 个参数开始移位;n 介于零和八之间。例如:
    SHIFT /2
...





shift命令是将参数向前挪一位,并且过程不可逆,通常情况下%1就被"干掉"了,我一般不在头脑不太清醒的情况使用这个命令
作者: fzfchao    时间: 2006-6-1 20:19
magictek 版主,清楚了,运行批处理还可加参数吗?这方面能不能给介绍?
    另外,在批处理后面跟的参数可以"搬"到批处理内部来使用 ,这样做有什么方便的地方?跟在bat文件中直接加参数有什么不同?
作者: magictek    时间: 2006-6-2 22:34
原帖由 fzfchao 于 2006-6-1 08:19 PM 发表
magictek 版主,清楚了,运行批处理还可加参数吗?这方面能不能给介绍?
    另外,在批处理后面跟的参数可以"搬"到批处理内部来使用 ,这样做有什么方便的地方?跟在bat文件中直接加参数有什么不同?



举个很简单的例子,在以前,在一台2x的CD-ROM卖1500文的时候,那个时候的游戏光盘通常是一张光盘上有几十个甚至几百个游戏,很多光盘的游戏安装是通过批处理来实现的(那个时候的专门安装软件基本没有,甚至只有ACE和PKZIP等压缩软件,连ARJ都没有,就更别说RAR了,WinRAR更是至少五年以后的事情,Wise、NullInstall、InstallShield更是根本没人可以想象出来),光盘每个目录下都有一个名为install.bat的批处理,该批处理内容大概如下:

@echo off
if "%1"=="" goto error
goto setup

:setup
md %1\game
xcopy *.* %1\game /s /e
goto end

:error
echo Error!Please input Destination Driver Letter
echo Smaple: Install X:
goto End

:End

这个批处理的意思是,如果批处理后面未跟任何参数,则跳转到Error段,并显示两行信息后退出
正确的命令应该是intsall D:这样后面跟个盘符,这样%1变量就被赋予了D:
“搬”到批处理里面来,xcopy *.* %1\game /s /e就变成了xcopy *.* D:\game /s /e了

[ 本帖最后由 magictek 于 2006-6-2 10:36 PM 编辑 ]
作者: magictek    时间: 2006-6-2 22:39
这个例子中就很清楚了,在编写批处理的时候,并不清楚客户想把这个游戏安装到哪个盘符,如果预先定制,简单又稳妥的方法是直接装C盘,但是很多客户会有意见,直接装D盘吧?可能有的用户真的只有一个C盘怎么办?也就是说该批处理就不具备通用性了,如果使用%1变量,则客户想安装到哪个盘,就可以安装到哪个盘
作者: fzfchao    时间: 2006-6-3 23:54
谢谢版主,现在明白了^_^




欢迎光临 无忧启动论坛 (http://bbs.wuyou.net/) Powered by Discuz! X3.3