将含有标签跳转命令的多行代码转换成一行。如:-
- if exist c:\123.txt (goto a) else (goto b)
- exit
- :a
- echo yes
- pause&exit
- :b
- echo no
- pause&exit
复制代码 转换结果示例:- if exist c:\123.txt (goto a) else (goto b)&exit&:a&echo yes&pause&exit&:b&echo no&pause&exit
复制代码 直接用 & 将每一行连接起来了,但无法执行或结果没有达到目标要求。
有何难度?
这个问题看似无法完成,主要是因为在连接标签名时,标签会失效。特别是许多命令,包括标签自身,都是通过行来定义执行的,离开行后命令会失效。
但,也正是不可能实现的问题才放出来挑战各位的思想和技术,希望有人能够实现。
这样做有什么用?
第一、在CMD窗口实现批处理脚本的标签功能。在CMD窗口是无法使用标签的,除非你在CMD窗口调用其他批处理脚本文件,虽然CMD帮助里有“goto/?”。 “cmd /c”命令有个弊端,就是它只支持一行命令参数,有多行就会出错。假如能将将许多命令压缩到一行中,包括标签跳转等,将极大的扩展“cmd /c”命令的使用,这样,大家可以使用cmd命令来取代临时文件。
第二、扩展变量型函数。同样,在变量型函数中,命令同样只能使用一行,不能多行,不能标签,限制了变量函数的应用。假如变量函数能包容更多的批处理脚本命令,将使得变量函数使用更加广泛。
批处理函数的高效另类应用(免call的哦!):http://www.bathome.net/viewthread.php?tid=5861
一些标签实验:
1、如何在标签名前面放置命令?
2、如何执行标签后的命令?-
- @echo off
- goto b
- pause
- exit
- (:b&echo I'am here)
- echo U lose
- pause&exit
- :b
- echo U wrong
- pause&exit
-
- 有效的标签:
- (:b&echo I'am here)
- (:b&echo I'am here
- :b:aaaaaaaaaaaecho I'am here
- ;;;;;;;;;;:b&echo I'am here
- ;;;;;;;;;:;;;;;b&echo I'am here
- ;;;=;;,;;; ;:;;=;,;;b&echo I'am here
- ;;;=;;,;;; ;:;;=;,;;b fsdfweer323,.^echo I'am here
-
- 无效(无法执行标签后的命令或者标签无效):
- &(:b&echo I'am here)
- [:b]
- ...:b
- :b (%I'am here%)
- :b %echo I'am here%
- :b echo I'am here^&echo U lose
- ;;;=;;,;;; ;:;;=;,;;b echo I'am here&echo U lose&pause&exit
复制代码 标签的一些属性
1、独立一行;
2、标签前可以添加一些无意义的符号,如“; = :”,而且可以同时使用多个且不影响标签名的有效性,还可将标签的冒号和标签名分开;
3、标签名后可以使用空格、冒号、&、|等少数几个符号分隔,使用其它字符示为标签名的有效组成部分,改变标签;
4、标签名后的命令无法执行,即使使用&也无济于事,因此,可以直接在标签名后写注释。 |