`

cmd for的用法(转)

阅读更多

先把FOR的变量全部列出来:
      ~I            - 删除任何引号("),扩展 %I
      %~fI          - 将 %I 扩展到一个完全合格的路径名
      %~dI          - 仅将 %I 扩展到一个驱动器号
      %~pI          - 仅将 %I 扩展到一个路径
      %~nI          - 仅将 %I 扩展到一个文件名
      %~xI          - 仅将 %I 扩展到一个文件扩展名
      %~sI          - 扩展的路径只含有短名
      %~aI          - 将 %I 扩展到文件的文件属性
      %~tI          - 将 %I 扩展到文件的日期/时间
      %~zI          - 将 %I 扩展到文件的大小
      %~$PATH:I     - 查找列在路径环境变量的目录,并将 %I 扩展
                    到找到的第一个完全合格的名称。如果环境变量名
                    未被定义,或者没有找到文件,此组合键会扩展到
                    空字符串


我们可以看到每行都有一个大写字母"I",这个I其实就是我们在FOR带入 的变量,我们FOR语句代入的变量名是什么,这里就写什么.
比如:FOR /F    %%z IN ('set') DO @echo %%z
这 里我们代入的变量名是z那么我们就要把那个I改成z,例如%~fI改为%~fz
至于前面的%~p这样的内容就是语法了!


好 开始讲解:

~I            - 删除任何引号("),扩展 %I
这个变量的作用就如他的说明,删除引号!
我 们来看这个例子:

首先我们在桌面建立一个名字为temp.txt文本文件,在里面输入这些内容
"1111
2222"
"3333"
44"44
然 后在建立个BAT文件代码如下:

FOR /F "delims=" %%i IN (temp.txt) DO @echo    %%~i
pause

执行后,我们看CMD的回显如下:
1111
2222"
3333
44"44
和 之前temp.txt中的内容对比一下,我们会发现第一行和第三行的引号都消失了,这就是删除引号~i的作用了!
删除引号规则如下(BAT兄补 充!)
1、若字符串首尾同时存在引号,则删除首尾的引号;
2、若字符串尾不存在引号,则删除字符串首的引号;
3、如果字符串中间 存在引号,或者只在尾部存在引号,则不删除。



%~fI          - 将 %I 扩展到一个完全合格的路径名
看 例子:
把代码保存放在随便哪个地方,我这里就放桌面吧.
FOR /F "delims==" %%i IN ('dir /b') DO @echo    %%~fi
pause

执行后显示内容如下
C:\Documents and Settings\Administrator\桌面\test.bat
C:\Documents and Settings\Administrator\桌面\test.vbs
当我把代码中的 %%~fi直接改成%%i
FOR /F "delims==" %%i IN ('dir /b') DO @echo    %%i
pause

执行后就会显示这些内容
test.bat
test.vbs

通 过对比,我们很容易就看出没有路径了,这就是"将 %I 扩展到一个完全合格的路径名"的作用
也就是如果%i变量的内容是一个文件名的话,他就会 把这个文件所在的绝对路径打印出来,而不只单
单打印一个文件名,自己动手动实验下就知道了!

%~dI          - 仅将 %I 扩展到一个驱动器号
看例子:
代码如下,我还是放到桌面执行!
FOR /F "delims==" %%i IN ('dir /b') DO @echo    %%~di
pause
执行后我CMD里显示如下
C:
C:
我桌面 就两个文件test.bat,test.vbs,%%~di作用是,如果变量%%i的内容是一个文件或者目录名,他就会把他这文件
或者目录所在的 盘符号打印出来!


%~pI          - 仅将 %I 扩展到一个路径
这个用法和上面一样,他只打印路径不打印 文件名字
FOR /F "delims==" %%i IN ('dir /b') DO @echo    %%~pi
pause

我 就不打结果了,大家自己复制代码看结果吧,下面几个都是这么个用法,代码给出来,大家自己看结果吧!


%~nI          - 仅将 %I 扩展到一个文件名
只打印文件名字
FOR /F "delims==" %%i IN ('dir /b') DO @echo    %%~ni
pause


%~xI          - 仅将 %I 扩展到一个文件扩展名
只 打印文件的扩展名
FOR /F "delims==" %%i IN ('dir /b') DO @echo    %%~xi
pause


%~sI          - 扩展的路径只含有短名
打印绝对短文件名
FOR /F "delims==" %%i IN ('dir /b') DO @echo    %%~si
pause


%~aI          - 将 %I 扩展到文件的文件属性
打印文件的属性
FOR /F "delims==" %%i IN ('dir /b') DO @echo    %%~ai
pause


%~tI          - 将 %I 扩展到文件的日期/时间
打印文件建立的日期
FOR /F "delims==" %%i IN ('dir /b') DO @echo    %%~ti
pause


%~zI          - 将 %I 扩展到文件的大小
打印文件的大小
FOR /F "delims==" %%i IN ('dir /b') DO @echo    %%~zi
pause


%~$PATH:I     - 查找列在路径环境变量的目录,并将 %I 扩展
                    到找到的第一个完全合格的名称。如果环境变量名
                    未被定义,或者没有找到文件,此组合键会扩展到
                    空字符串
这 是最后一个,和上面那些都不一样,我单独说说!
我们先在桌面建立一个temp.txt文件,里面写上这些内容
c:\windows
c:\windows\system32
c:\windows\teett

然 后在把这些代码保存为批处理,放在桌面.
FOR /F "delims==" %%i IN (temp.txt) DO @echo    %%~$PATH:i
pause

执行后CMD显示如下内容
c:\WINDOWS
c:\WINDOWS\system32
ECHO 处于打开状态。

为什么会这样呢,还有一行c:\windows\teett呢?
我们直接在CMD里输入echo %path% 会显示C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem
%%~$PATH:i 也就是在文本里寻找匹配这个PATH变量值的内容,如果里面的内容和PATH变量相同,就打印出来
如果不相同,就显示一个空行!

只 能适用于PATH变量,其他变量不行,如果要比较很多值,可尝试把值赋予给PATH变量,我没测试!

好了,FOR的的变量就介绍到这了!

 

 

---------------------------------------------

< type="text/javascript"><!-- google_ad_client = "pub-1992382271196226"; /* 728x90, 创建于 08-3-9 */ google_ad_slot = "1653402536"; google_ad_width = 728; google_ad_height = 90; // --> < src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript">

dos下面的批处理文件还是比较强大的,虽然刚开始觉得很不好用。遇到这么一个问题:用户输入一个新的版本号,解析其中的每个数字。例如一个版本号 是"5.4.6",则要用"."分割开,然后提取其中的每个数字。处理命令为:

@REM 首先提示用户输入字符串,如5.4.6

@set /p inputVersion=version number:
FOR /F "tokens=1,2,3 delims=." %%a IN ("%inputVersion%") DO CALL SETVERSION %%a %%b %%c

setversion则又是另外一个bat文件,如下所示:

@SET major=
@SET minor=
@SET tiny=
@SET major=%1
@SET minor=%2
@SET tiny=%3

dos中的for语句的do后面只能接一个命令,如果用goto的话,不知道参数怎么传递,所以只好调用另外 一个bat文件了。

对于上面的for语句要注意了。delims表示分隔 符,tokens表示分割后的哪些字符需要传递到for循环中,也就是要进行do后面的命令行处理。如果输入5.4.6,那么1表示5,2表示4,3表示 6,4就是空的了。如果tokens=1,则表示只把5传入do语句。如果tokens=1,2,3则表示4,5,6都要进行处理。奇怪的现象是,%%a 代表第一个字符串,而2、3个字符串则是默认由%%a增加,即%%b, %%c表示。不知道如果变量不是%%a,后面的变量会是怎么表示。

你还可以参看下面的例子,该例子引用自:http://www.ss64.com/nt/for_f.html 这个例子比windows帮助上的说明要详细。

Extracting data from this text file:

January,Snowy,02
February,Rainy,15
March,Sunny,25

FOR /F "tokens=1,3 delims=," %%G IN (weather.txt) DO @echo %%G %%H

The tricky part is splitting up each the line into the right tokens, in this case I'm splitting on the comma character ',' this splits the line into 3 chunks of text and we pull out the first and third items with "tokens=1,3"

token1 , token2 , token3
%%G <ignored> %%H
January 02
February 15
March 25

%%G is declared in the FOR statement and %%H is implicitly declared via the tokens= option. You can specify up to 26 tokens via the tokens= line, provided this does not cause an attempt to declare a parameter higher than the letter 'Z'.

FOR parameter names are global, so in complex scripts which call one FOR statement from within another FOR statement you can refer to both sets of parameters. You cannot have more than 26 parameters active at any one time.

< type="text/javascript"><!-- google_ad_client = "pub-1992382271196226"; /* 728x15, 创建于 08-9-3 */ google_ad_slot = "9127232582"; google_ad_width = 728; google_ad_height = 15; // --> < src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript">

 

 

 

------------------------------------------------------------------------------------------------------

FOR /F ["options"] %variable IN (file-set) DO command [command-parameters]
FOR /F ["options"] %variable IN ("string") DO command [command-parameters]
FOR /F ["options"] %variable IN ('command') DO command [command-parameters]

optinos
eol=c           - 指 一个行注释字符的结尾(就一个)//要忽略以什么字符开头的行
skip=n          - 指在文件开始时忽略的行数。
delims=xxx      - 指 分隔符集。这个替换了空格和跳格键的//指定分割的字符列入delims=;:.使用了";",":","."做分隔
                  默 认分隔符集。
tokens=x,y,m-n  - 指每行的哪一个符号被传递到每个迭代
                  的 for 本 身。这会导致额外变量名称的分配。m-n
                  格式为一个范围。通过 nth 符号指定 mth。如果
                  符 号字符串中的最后一个字符星号,
                  那么额外的变量将在最后一个符号解析之后
                  分 配并接受行的保留文本。
usebackq        - 指定新语法已在下类情况中使用:
                  在作 为命令执行一个后引号的字符串并且一个单
                  引号字符为文字字符串命令并允许在 filenameset
                  中 使用双引号扩起文件名称。
列子
for /f "tokens=1-3 delims=:." %1 in ("%time%") do @echo %1-%2-%3
截 断%time%返回的字符并替换
for /f "tokens=2 delims= " %1 in ("%date%") do @echo %1
截 断%date%返回的字符

用%date%+%time%
建立目录
指定的格式
2004-10-12@12-11
分 别是年-月-日@小时-分
for /f "tokens=2 delims= " %1 in ("%date%") do @set D=%1
for /f "tokens=1-3 delims=:." %1 in ("%time%") do @set T=%1-%2
mkdir "%D%@%T%"
完 整的bat
-----------------------------------------
@echo off
setlocal
for /f "tokens=2 delims= " %%1 in ("%date%") do @set D=%%1
for /f "tokens=1-3 delims=:." %%1 in ("%time%") do @set T=%%1-%%2
mkdir "%D%@%T%"
endlocal

 

 

 

@echo off
set pwd=%cd%
set projects=project1,project2
for %%i in (%projects%) do @cd %pwd%\%%i&mvn clean install eclipse:clean eclipse:eclipse -Dmaven.test.skip
pause

分享到:
评论

相关推荐

    Windows bat脚本之for循环用法详解

    主要介绍了Windows bat脚本之for循环用法详解,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

    CMD命令行高级教程

    第四种用法:IF 增强的用法 第七章 DOS 编程高级技巧 一、界面设计 二、if…else…条件语句 三、循环语句 四、子程序 五、用ftp 命令实现自动下载 六、用7-ZIP 实现命令行压缩和解压功能 七、调用VBScript 程序 八、...

    cmd操作命令和linux命令大全收集

    CMD命令:开始-&gt;运行-&gt;键入cmd或command(在命令行里可以看到系统版本、文件系统版本) 命令大全 1. gpedit.msc-----组策略 2. sndrec32-------录音机 3. Nslookup-------IP地址侦测器 ,是一个 监测网络中 DNS...

    env-cmd:从文件设置环境变量

    :keyboard_selector: 基本用法 环境文件./.env # This is a comment ENV1=THANKS ENV2=FOR ALL ENV3=THE FISH Package.json { " scripts " : { " test " : " env-cmd mocha -R spec " } } 终奌站 ./node_...

    cmd中MySQL中文数据乱码问题解决方法

    我的MySQL是默认utf8编码的,所建数据库也是设置utf8编码,使用程序可以新增中文数据,在cmd中使用SQL语句新增数据则报类似Incorrect string value: ‘\xB2\xE2\xCA\xD4’ for column ‘title’ at row 1错误,而...

    python执行CMD指令,并获取返回的方法

    如下所示: result = os.popen('ps aux') ... 您可能感兴趣的文章:如何安装并使用conda指令管理python环境python如何以表格形式打印输出的方法示例Python3内置模块pprint让打印比print更美观详解python实现顺时

    grunt-cmd-wrap:一个 Grunt 任务插件,用于将 CommonJS 模块动态传输到 SeaJS 环境的 CMD 模块

    A Grunt task plugin to transport CommonJS module to CMD module for SeaJS environment dynamically. Grunt 插件:通过 Web 服务实时地将 CommonJS 模块转化成 CMD 模块,方便 SeaJS 环境中的开发调试。 背景 ...

    window命令提示符

     volume label (11 characters,Enter for none)?  可以输入卷标,直接回车后  Delete current volume label (Y/N)?  按y删除旧卷标,按n不更改  defrag 磁盘碎片整理  〔适用场合〕 磁盘读写次数很多,或...

    ssh-for-windows

    在windows下,cmd 窗口中使用ssh 命令. 用法: c:\Windows\System32&gt;ssh root@192.168.1.1 . 同linux下一样.

    图解考试环境下masm使用方法

    图解考试环境下masm使用方法 出自:全国计算机等级考试官方论坛 » 三级PC技术讨论区 » 图解考试环境下masm使用方法!! (http://bbs.ncre.cn/index.php) 1. 在dos环境下输入: edit prog1.asm ,进行源码编辑 ...

    Git安装与使用方法入门

    在安装过程中,你可以选择一些配置选项,但通常使用默认设置即可。 5、安装完成后,你可以通过Terminal或其他终端应用程序访问Git。 Git配置环境变量 把git的bin 目录,路径完整加入系统变量,在cmd中输入git; ...

    LuaJIT for windows可运行版本

    LuaJIT,windows版本 官网提供的是源代码,需要针对不同平台进行手动进行编译。 本软件为luajit2.0.3...使用方法:下载解压后,把路径添加到系统环境变量的path中即可。 cmd进入DOC窗口输入"luajit -b"等命令直接使用

    FFmpeg Windows(64bit)

    FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。...具体使用方法和用途,请自行百度。 可以参考我的博客:http://blog.csdn.net/spark_csdn/article/details/57080034

    ahci 驱动 for ESB2/ICH7R/ICH7M/ICH8R/ICH8M/ICH9R/ICH9M/ICH10R/ICH10

    使用方法: 下载附件,解压,执行ahci\PREPARE\install.cmd 完成后重启,在BIOS里启用(ICH10) SATA AHCI 再进系统,应该不蓝屏 此时发现新硬件,指向刚才解压的目录内 驱动安装完毕,重启后能正常使用

    wget for windows 64位安装包exe文件

    wget for windows 64位安装包exe文件;使用方法如下:将下载的压缩包解压后,将里面的wget.exe文件复制到C:Windows\System32文件夹里面;此时打开cmd命令行,直接输入wget 资源链接 就可以啦

    wait-for-url:Bash脚本,用于等待URL变得可访问

    用法只需将脚本复制到您自己的仓库中,然后运行: $ ./wait-for-url.sh http://www.google.com:80完整语法为: $ ./wait-for-url.sh url [retries] -- [cmd]可选参数: retries :告诉retries URL提取的时间。...

    bpmn-js-cmd:使用https渲染BPMN-Diagrams的命令行工具

    使用NPM安装: npm install -g bpmn-js-cmd 用法 Usage: bpmn-js [options] Positionals: file a BPMN-XML process definition file Options: -t, --type file type of the new diagram [choices: "svg", "png",...

    aria2 for win64

    aria2 for win64 基本用法:把压缩包中的exe和aria2.conf放到C:\windows目录下,修改aria2.conf中的dir=E:\download为你自己的下载路径。最后cmd中执行aria2c.exe --conf-path=C:\Windows\aria2.conf

Global site tag (gtag.js) - Google Analytics