[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
以下的代码利用外部命令 findstr 达成目的, 但楼主明确要求 不使用任何外部命令,
期待完全符合楼主期望的代码.>> bin.txt findstr /v /r /c "%~0"
REM statements
REM command...

此代码的末行是唯一的一个  ...
neorobin 发表于 2011-5-15 11:36

最简单的方法居然无人问津,真是悲哀

TOP

还有,上次寒夜孤星教过我们如何用debug查看内存中的环境变量,cmd中的环境变量以00为分隔符,内存中的内容我们甚至都没法转义,这大概就像变量替换中的“=”一样,恐怕拿它没办法,所以plp在顶楼说nul无法用变量获取

TOP

copy con a.txt
然后输入 ctrl+z

想了一下,可以这样  copy nul a.txt
debug a.txt
d100 发现全0
caruko 发表于 2011-5-18 02:48

不是的,debug无论看什么文件,只要超过有效内容而低于64k,显示的都是一堆00,要判断是否输出了nul到文件,用debug可能不合适,还是用dir看字节更明显
plp之所以用@copy nul+nul sub.txt能获取结束符,是利用了copy ?+?时会自动给文件之间加上结束符的特性,而copy /b就不会加上这个结束符。可以看到,此处的nul仍然相当于空,而非十六进制的00,至于copy con再结束输入,好奇之下试了试,似乎也没有效果。

TOP

本帖最后由 caruko 于 2011-5-18 10:28 编辑

不过,变量赋值为00这个16进制字符,使用它会提示变量没有定义。
一般 set "x=",表示销毁X变量, 除非利用DEBUG,更改变量表中的数据。

制作了一个  0077   2个字节的文本。
notepad打开只看到一个w。
type 输出可以看到w前有一个空格。
但是set /p=<nnn.txt,跟for 提取都提取不到。

试试,type输出,然后复制出来的
  1. ^
复制代码

TOP

呃,copy nul 原来有了。
回复没翻页没看到。

TOP

本帖最后由 caruko 于 2011-5-18 02:49 编辑

copy con a.txt
然后输入 ctrl+z

想了一下,可以这样  copy nul a.txt
debug a.txt
d100 发现全0

TOP

有个疑问,你14楼的代码为什么要多一行 echoo >nul?
是为了防止在不同的语言环境下出现“Invalid keyboard code specified”的错误输出干扰echoo.com的正常输出
主要是针对系统内不存在“英语(美国)”语言的情况
第一次运行echoo.com或其它的16位程序后键盘代码会进行切换
第二次运行不会再有这样的提示

echoo.com $# 创建的是"-"
echoo.com $$创建 但是"="
而echoo.com $#$$ 又创建的不是"=-" 而是"4#"
这里是怎么对应的?

程序固定从$后取两个字符进行计算
如果只跟一个字符则会将回车符0x0d取入合并计算
16进制转10进制算法并不严格检验输入数的合法性
所以会有一些莫名其秒的误差
第三句是取了$#$ 再取$

这段代码仍然是ASCII汇编大师Herbert Kleebauer 的作品
其作品通常只会有Motorola样式汇编源码
与通常我们所学习的Intel样式汇编略有不同
有余力的可以查看以下代码
  1.         @=$178
  2.         move.w  #1,r2           ; write 1 char
  3.         move.w  r2,r3           ; to stdout
  4.         move.w  #buf,r1         ; write buffer
  5.         move.w  r1,r6
  6.         move.w  #$80,r5
  7.         movu.bw (r5.w),r4       ; cmdline length
  8. _30:    inc.w   r5
  9.         dec.w   r4
  10.         bmi.b   _100            ; at least 1 byte
  11.         cmp.b   #' ',(r5.w)
  12.         beq.b   _30
  13.         
  14. _10:    move.b  (r5.w),r0       ; next byte from cmdline
  15.         inc.w   r5
  16.         move.b  r0,(r6.w)
  17.         cmp.b   #',r0
  18.         bne.b   _20
  19.         move.b  (r5.w),r0
  20.         inc.w   r5
  21.         bsr.w   hex2bin
  22.         move.b  (r5.w),r0
  23.         inc.w   r5
  24.         bsr.w   hex2bin
  25. _20:    move.b  #$40,m0
  26.         trap    #$21
  27.         dec.w   r4
  28.         bpl.b   _10
  29. _100:   rts.w
  30. hex2bin:
  31.         or.b    #$20,r0
  32.         sub.b   #'a'-10,r0
  33.         bpl.b   _10
  34.         add.b   #'a'-10-'0',r0
  35. _10:    lsl.b   #4,(r6.w)
  36.         add.b   r0,(r6.w)
  37.         dec.w   r4
  38.         rts.w
  39. buf:   
复制代码
1

评分人数

天的白色影子

TOP

以下的代码利用外部命令 findstr 达成目的, 但楼主明确要求 不使用任何外部命令,
期待完全符合楼主期望的代码.
  1. >> bin.txt findstr /v /r /c:$ "%~0"
  2. REM statements
  3. REM command...
  4. <only a null charactor>
复制代码
此代码的末行是唯一的一个 null 字符, 若 bin.txt (.txt 扩展名不是必须的)不存在,
将创建仅含一个 null 字符的文件, 否则将一个 null 字符加入到文件的末尾.

这个字符输入方式:
命令行中: (配合 copy con 可保存到新建的文件中)
Ctrl+@
Alt+256 (数字小键盘区, 笔记本可用 Alt+Fn+256 (数字小键区))

notepad++:
输入并选择:
00
"TextFX" -> "TextFX Convert" -> "Convert Hex to text"

小趣发现: 命令行下, 输入 Ctrl+@, 回车, 显示 more? , 再输入 Ctrl+@, 回车, 窗口被关闭.

参考:
http://stackoverflow.com/questions/2730732/how-can-i-write-a-null-ascii-character-nul-to-a-file-with-a-windows-batch-scrip
2

评分人数

    • plp626: 回头看次贴,这个信息那是很关键的;PB + 10
    • zm900612: 好思路!PB + 6

TOP

我也一直以为是echo nul>1.txt
原来是空字符文本,中英混合的语法错误,我觉得楼主把nul改成空字符更便于理解。

TOP

本帖最后由 yjstone 于 2011-5-14 22:59 编辑

学习一下高手的方法,我原来以为 是用ehco.^nul >a.txt呢。

TOP

本帖最后由 yjstone 于 2011-5-14 22:57 编辑

不好意思,理解错了,还以为是生成一个含nul字符的文件文件呢!

TOP

>仅内部命令,便可以生产任何我想要的三方
不明白怎么实现。。。
exe→转化→批处理可存储的字符→还原→exe
转化和还原仅内部命令可以实现吗?
或者你不是采用这种转换模式?
难道是用echo之类命令直接生成exe文件?
那你exe文件结构的了解不是一般的彻底,那是相当彻底。
拜服。。。
相比之下ascode技术倒没有如此令我惊叹。

TOP

plp的帖子我从此不看
523066680 发表于 2011-5-14 14:54

这是为神马...

TOP

本帖最后由 asnahu 于 2011-5-14 19:40 编辑

qzw 开个专题讲解一下 ascode 吧

TOP

plp的帖子我从此不看

TOP

返回列表