将含有标签跳转命令的多行代码转换成一行。如: | | | if exist c:\123.txt (goto a) else (goto b) | | exit | | :a | | echo yes | | pause&exit | | :b | | echo no | | pause&exitCOPY |
转换结果示例:if exist c:\123.txt (goto a) else (goto b)&exit&:a&echo yes&pause&exit&:b&echo no&pause&exitCOPY 直接用 & 将每一行连接起来了,但无法执行或结果没有达到目标要求。
有何难度?
这个问题看似无法完成,主要是因为在连接标签名时,标签会失效。特别是许多命令,包括标签自身,都是通过行来定义执行的,离开行后命令会失效。
但,也正是不可能实现的问题才放出来挑战各位的思想和技术,希望有人能够实现。
这样做有什么用?
第一、在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&exitCOPY |
标签的一些属性
1、独立一行;
2、标签前可以添加一些无意义的符号,如“; = :”,而且可以同时使用多个且不影响标签名的有效性,还可将标签的冒号和标签名分开;
3、标签名后可以使用空格、冒号、&、|等少数几个符号分隔,使用其它字符示为标签名的有效组成部分,改变标签;
4、标签名后的命令无法执行,即使使用&也无济于事,因此,可以直接在标签名后写注释。 |