个困扰我多年的dos问题

来源:百度知道 编辑:UC知道 时间:2024/06/05 03:43:24
DOS中如何将一个命令的结果作为另一个命令的参数。
如: ren "dir /s/b *.exe 这个命令的结果转给ren作参数" aaaaaa.exe

我以前弄起过,现在记不得了,只记得当时是把那个作为参数的命令始用了""号包括起来的。

Re wind_7th:

首先,纯DOS平台和NTs'CMD都不具有简单、直接而且强有力的保存程序输出结果到变量(这里指环境变量)的特性或者命令。

其次,我们可以通过一些命令的简单组合,完成最简单的保存任务,即保存输出结果的第一行内容到环境变量。

在 NTs'CMD 下,可以使用以下代码(令人疑惑的是,set /p 支持重定向而不支持管道,不知有谁可以解惑?),当然无奈和兄提供的 for /f 的方案也是很好的。

command arguments > output.txt
set /p output= < output.txt
del output.txt

在纯DOS下,我最早采用的是预先编写环境声明头文件的方案,具体细节见[1];不久,鉴于此方案必须事先编辑头文件的缺点,我就改用 debug 来动态生成这个头文件,实现了脚本的自给自足的完全自动化,代码见[5]中1、2、3楼的程序,它们均是实现对 dir 命令输出的保存和分析来完成相应的变量操作。其中的 :init 段便是此原理的集中应用。后来我又尝试过其它 edlin/date/prompt等诸多方案,但均有局限,使用于不同的应用场合,都不如 debug 来的通用。

最后,如果要实现更复杂的变量保存,比如保存指定行、指定单词、指定列的文本,或者过滤诸如 管道、重定向等一些命令行特殊符号,就需要使用更复杂的代码。

在 NTs'CMD下,可以使用 set、for、find 等内部命令对文本内容进行控制。而在纯DOS下,这种控制的实现是通过更复杂的 debug 脚本再加上 find 对文本内容(见[5]中的最后两个代码);或者使用诸如 LMOD[2][3]、NSET[4] 、strings、awk、sed 等第三方工具来实现这些任务。

以上提供了诸多方案,但是请记住,没有一个程序或者方案能完善无缺、简洁有效的处理所有问题。我们应该首先熟悉这些方案以及它们的优缺点,然后根据再具体环境斟酌选择。