参数传递对程序来说,是一个很重要的事情,所以,获得传递的参数是很重要的,接下来,我们来探讨下获得传递的参数的N种方式。

1、%N  获得传递的第N个参数(N最大为9)

就是传递过去的参数原样值(并且忽略前后导空格)

@echo off
echo %

运行结果为(a.bat canshu)

canshu

2、%~1  也就是说,把第一个参数的引用字符串给去掉(两段的引号),如果只有一侧有的话,就删除有的那一侧。

すべての引用句 (") を削除して、%1 を展開します。

例如:

"1"2"➡1"2    "1"2➡1"2    1"2"➡1"2    1"2➡1"2

@echo off

运行结果:

F:\tmp>a.bat "1"2"
1"2

3、%~f1   获取参数1指定的路径的全路径/如果是只指定文件名的话,就是当前路径 + 参数1表示的全路径名

%1 を完全修飾パス名に展開します。

例如参数1是C:\Users\liuhongying\tmp\test.txt的时候,结果就是C:\Users\liuhongying\tmp\test.txt

例如当前路径是F:\tmp\,传递的参数是1234,那么,得到的结果就是F:\tmp\1234

@echo off

echo %~f1

运行结果:

F:\tmp>a.bat C:\Users\liuhongying\tmp\test.txt
C:\Users\liuhongying\tmp\test.txt

F:\tmp>a.bat 1234
F:\tmp\1234

那如果没有参数1的时候呢?输入结果是什么呢?然我们来看看

F:\tmp>a.bat
ECHO は <OFF> です。

也就是说,如果这个参数本身就不存在的时候,取得的东西就是空的了。

4、%~d1   获取参数1指定的路径的盘符名/如果只指定文件名,那么结果就是当前路径的盘符名

%1 をドライブ文字だけに展開します。

例如参数1是C:\Users\liuhongying\tmp\test.txt的时候,结果就是C:

例如当前路径是F:\tmp\,那么得到的结果就是F:

@echo off

echo %~d1

运行结果:

F:\tmp>a.bat C:\Users\liuhongying\tmp\test.txt
C:

F:\tmp>a.bat 1234
F:

那如果没有参数1的时候呢?输入结果是什么呢?然我们来看看

F:\tmp>a.bat
ECHO は <OFF> です。

也就是说,如果这个参数本身就不存在的时候,取得的东西就是空的了。

5、%~p1  获取参数1指定的路径的路径名/如果只指定文件名,那么结果就是当前文件的路径名

%1 をパスだけに展開します。

例如参数1是C:\Users\liuhongying\tmp\test.txt的时候,结果就是\Users\liuhongying\tmp\

例如当前路径是F:\tmp\,那么得到的结果就是\tmp\

@echo off

echo %~p1

运行结果为:

F:\tmp>a.bat C:\Users\liuhongying\tmp\test.txt
\Users\liuhongying\tmp\

F:\tmp>a.bat 1234
\tmp\

那如果没有参数1的时候呢?输入结果是什么呢?然我们来看看

F:\tmp>a.bat
ECHO は <OFF> です。

也就是说,如果这个参数本身就不存在的时候,取得的东西就是空的了。

6、%~n1    获取参数1指定的路径的文件名/如果只指定文件名,那么结果就是这个文件名

%1 をファイル名だけに展開します。

例如参数1是C:\Users\liuhongying\tmp\test.txt,那么路径的文件名是test

@echo off

echo %~n1

运行结果:

F:\tmp>a.bat C:\Users\liuhongying\tmp\test.txt
test

F:\tmp>a.bat test.txt
test

7、%~x1  就是表示文件的扩展名(包括分隔符的句点)

%1 をファイル拡張子だけに展開します。

@echo off

echo %~x1

运行结果

F:\tmp>a.bat C:\Users\liuhongying\tmp\test.txt
.txt

F:\tmp>a.bat test.txt
.txt

8、%~s1 获取指定路径的短路径

展開されたパスは、短い名前だけを含みます。

什么短路径呢?短路径就是使用一种命名规范来缩短表示路径的长度。

短路径名实在DOS下的命名规则
在DOS中,主文件名的长度不能超过8个字符
如果超过了8个 系统自动截取前6个字符,然后加上~1
如果前6个字符一样了,那么路径名就按照字符串排序,然后就依次使用~2,~3

例如路径名为C:\Users\liuhongying\tmp\test.txt短路径就是C:\Users\LIUHON~1\tmp\test.txt

@echo off

echo %~s1

运行结果

F:\tmp>a.bat C:\Users\liuhongying\tmp\testtesttest.txt
C:\Users\LIUHON~1\tmp\testtesttest.txt

由此看来,短路径只是缩短路径部分。

9、%~a1 获取参数1指定的文件的属性(如果文件不存在,结果就是空的)

%1 をファイル属性に展開します。

@echo off

echo %~a1

运行结果

F:\tmp>a.bat C:\Users\liuhongying\tmp\test.txt
--a--------

*这里a代表的是存档文件属性,具体还有什么别的,在那个位置,如果以后有用到在总结吧。

10、%~t1  获得文件的更新日期和时间

%1 をファイルの日付/時刻に展開します。

@echo off

echo %~t1

运行结果

F:\tmp>a.bat C:\Users\liuhongying\tmp\test.txt
2013/07/27 01:38

11、%~z1  获得参数1指定文件的大小(byte数)

%1 をファイルのサイズに展開します。

@echo off

echo %~z1

运行结果

F:\tmp>a.bat C:\Users\liuhongying\tmp\test.txt
17

12、%~$PATH:1   在path指定的路径中检索参数1指定的文件,如果找到了就返回全路径,否则,就返回空。

@echo off
set PATH=C:\Users\liuhongying\tmp\

执行结果

F:\tmp>a.bat test.txt
C:\Users\liuhongying\tmp\test.txt

@echo off
set PATH=C:\Users\liuhongying\

执行结果

F:\tmp>a.bat tmp\test.txt
C:\Users\liuhongying\tmp\test.txt

由此可见,即path + 参数1拼成的字符串指定的文件如果存在,就返回该全路径。

F:\tmp>a.bat test.txt
ECHO は <OFF> です。

由以上运行结果可以看出,检索不包括下层目录。可以进一步验证上一个验证结果。

获取参数值的地方已经分析完了。

不过,这些方法可以有很多种组合方式。进一步的应用就要看你使用的灵活性了。

DOS批处理命令-引数取得的更多相关文章

  1. DOS批处理命令判断操作系统版本、执行各版本对应语句

    DOS批处理命令判断操作系统版本.执行各版本对应语句   昨天在家里试用  netsh interface ip set address 这些命令更改上网IP.DNS.网关等,今天将那些代码拿来办公室 ...

  2. DOS批处理命令递归删除给定的文件(夹),兼VC工程清理小工具

    使用dos批处理命令递归删除指定的文件(夹): (下面内容针对清理VC工程!自己按说明任意修改) 2014-06-10修改:删除前增加了[y,n]询问: echo off rem 递归删除当前文件下指 ...

  3. DOS批处理命令-call命令

    call命令 在批处理中调用别的批处理或者可运行程序或者 バッチ プログラムを別のバッチ プログラムから呼び出します. 语法 1.CALL [驱动盘符:][路径]文件名 [参数] 调用并执行[驱动盘符 ...

  4. DOS批处理命令-if语句

    IF语句是批处理中执行的条件分歧处理. 批处理中,IF分歧的写法有好几种,接下来,我们来一个一个的分析IF语法的结构. 1.IF [NOT] ERRORLEVEL 番号 批处理命令 当ERRORLEV ...

  5. DOS批处理命令-几个固定名称的变量

    批处理中有一些变量的变量名称是固定的,具有特定的意义,接下来,我们来看看这些有特定意义的变量到底有什么意义. 1.%CD%   当前路径的路径名[盘符 + 路径]    - 現在のディレクトリ文字列に ...

  6. DOS批处理命令-@命令

    @命令是一个禁止当前语句回显的简单命令. 语法: @[command].[command]是要屏蔽的批处理命令 例如执行包含以下内容的bat文件 echo on @echo ------- @echo ...

  7. cocos2d-x教程3:用php或DOS批处理命令来转换文件和解压缩zip

    在cocos2d-x使用中,须要不停的转换文件和压缩或解压文件.假设全人工来做,太麻烦了,且easy出错. 我如今把一些用的到批处理贴出来,供大家使用 自己主动把dat文件按数字排序重命名gz.DOS ...

  8. DOS 批处理命令For循环命令详解

    for命令是一种对一系列对象依次循环执行同一个或多个命令的在命令行或批处理中运行的命令,结合一些Windows管理中的程序后,其处理功能强大.应用灵活方便程度令人刮目相看   for命令是一种对一系列 ...

  9. DOS批处理命令-for语句

    for是为了循环执行一系列命令而执行的命令语句. for要处理的内容不同,语法结构稍有不同.下面就各种情形来分别 1.基本的语法:FOR %変数 IN (set) DO 命令 [参数] 语法内容解析: ...

随机推荐

  1. hadoop2.1.0编译安装教程

    由于现在hadoop2.0还处于beta版本,在apache官方网站上发布的beta版本中只有编译好的32bit可用,如果你直接下载安装在64bit的linux系统的机器上,运行会报一个INFO ut ...

  2. 为什么 JavaScript 中基本数据类型拥有 toString 之类方法?

    在 JavaSctipt 启示录一书中,关于为什么 JS 中基本数据类型可以调用一堆对象方法.大意即指,当原始数据类型(boolean,Number.String)在调用方法时,JS 将会创建对象,以 ...

  3. Ecshop实现注册页面手机号唯一的验证

    前天,公司总监提了一个需求,实现我公司商城注册会员用手机号登录这个功能,那么这个功能容易修改,在我的前一篇博文中已经给出处理方法了,但是这里有一个问题,就是如果实现了用手机号码来登陆,那么就需要在注册 ...

  4. ListView为什么用setOnItemClick这个方法和onTouch这个方法有冲突

    因为如果onTouch方法中返回true的话,这次事件就被ListView中的item控件消费了,所以不会执行ListVIew的setOnItemClick这个方法了,如果onTouch方法返回fal ...

  5. QM04-生产中的QM

    集成的计划 生产过程中的生产工序和检验工序逐渐变得更为相互依赖或者说被组合在一起.从而使来自生产和质量检验领域的工作小组共同创建工艺流程. 检验工序 可以把QM检验特性集成到生产计划(PP)模块的工作 ...

  6. RapeLay(电车之狼R)的结局介绍 (隐藏结局攻略)

    RapeLay(电车之狼R)的结局介绍 (隐藏结局) 必备知识要让MM怀孕非常easy.起初刚进入调教模式后.仅仅要H一次 MM就開始有时期状态. 生理(连上有红晕) ->不详状态(闭目第一次) ...

  7. Android游戏开发之主角的移动与地图的平滑滚动

    人物移动地图的平滑滚动处理 玩过rpg游戏的朋友应该都知道RPG的游戏地图一般都比较大 今天我和大家分享一下在RPG游戏中如何来处理超出手机屏幕大小的游戏地图. 如图所示为程序效果动画图 地图滚动的原 ...

  8. 归并排序的C语言实现

    归并排序的核心思想是 Divide-and-Conquer 算法,即将要解决的size为n的问题,分成a个size为n/b的子问题,这些子问题的结果经过O(n^d)的时间复杂度合并,即可解决最初的问题 ...

  9. Java 开源博客——B3log Solo 0.6.6 正式版公布了!

    Java 开源博客 -- B3log Solo 0.6.6 正式版公布了!欢迎大家下载. 该版本号引入了数据库连接池:Druid. 另外,欢迎观摩 B3log 团队的新项目:Noty,也很欢迎大家參与 ...

  10. oc-03-OC访问OC源文件、C源文件中的函数

    show.h #ifndef __OCDay01__Show__ #define __OCDay01__Show__ #include <stdio.h> extern void test ...