Board logo

标题: [提问]bat中转向输出问题 [打印本页]

作者: electronixtar     时间: 2006-6-28 14:49    标题: [提问]bat中转向输出问题

1.
echo a>D:\a,txt
结果生成了文件a,内容为test,txt
改成
echo a>"D:\a,txt"
正常

2.
echo test 1>1.txt adsfadf
生成1.txt,内容:
test  adsfadf

这些现象怎么解释呢?

如果用这些特性输出exe木马那么……

[ Last edited by electronixtar on 2006-6-28 at 14:51 ]
作者: bagpipe     时间: 2006-6-28 15:24
echo hello world>1.txt

echo >1.txt hello world

echo hello>1.txt world

>1.txt echo hello world

看看这个,也许你就会明白了....................
作者: electronixtar     时间: 2006-6-28 17:02
难道说那些重定向像ANSI转义代码那样被忽略了??
作者: willsort     时间: 2006-6-29 09:53
Re electronixtar:

      这是由 cmd/command 的命令行预处理机制造成的。

      命令行解释器在正式执行读入的一条命令之前,会进行许多预处理过程,以对其中的转义符号进行转义解释和过滤,并完成命令行的格式化工作,包括空格和制表符缩减,命令行参数界分,IO端口的重定向等等。

      而命令行中的各种符号存在优先级,也就是说,它总是先处理优先级最高的符号,待将符号处理并转义后,将此符号滤去再处理新得到的命令行,带到所有的特殊符号都被处理后,才会正式执行最后得到的命令语句。这在一些语言的预编译或预处理过程中也比较常见。

      比如说,命令行前后和之间的空格和制表符就具有很高的优先级,它具有界分命令和参数的作用;而表征变量的百分号%、表征字符串得引号对""也具有比较高的优先级,比管道和重定向都要高。另外,cmd中引入的表征单字符的^、表征变量延迟的叹号对!!,容纳语句块的括号对(),连接命令的&、&&、||等,使得命令行的优先级更加丰富,也更加复杂。
作者: electronixtar     时间: 2006-6-29 11:38
博大精深,受教了~
作者: htysm     时间: 2006-6-30 10:16
太精彩,又是一个高手过招,
作者: xiongwei2624     时间: 2006-6-30 14:04
厉害,佩服深刻!
学到,慢慢掌握