[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
本帖最后由 plp626 于 2011-5-14 13:40 编辑

15# qzwqzw

这个直接签到bat源代码中,不过要在注释行加转义字符^
  1. ::{^}
  2. @echo off
  3. set/p sub=<%~s0
  4. setlocal EnableDelayedExpansion
  5. set sub=!sub:~4,1!
  6. set/p=!sub!<nul>sub.txt
复制代码
还可借助copy nul的特性,但要生产临时文件,不过很简洁
  1. @copy nul+nul sub.txt
复制代码
1

评分人数

    • zm900612: 哈哈,忘了有这个技术 + 1

TOP

本帖最后由 plp626 于 2011-5-14 13:46 编辑

re: qzwqzw

有个疑问,你14楼的代码为什么要多一行 echoo >nul?
  1. @echo off
  2. (echo Bj@jzh`0X-`/PPPPPPa(DE(DM(DO(Dh(Ls(Lu(LX(LeZRR]EEEUYRX2Dx=
  3. echo 0DxFP,0Xx.t0P,=XtGsB4o@$?PIyU!WvX0GwUY Wv;ovBX2Gv0ExGIuht6
  4. echo ?@xAyJHmH@=a?}VjuN?_LEkS?`w`s_{OCIvJDGEHtc{OCIKGMgELCI?GGg
  5. echo EL?s?WL`LRBcx=k_K?AxVD?fCo?Cd?BLDs0)>echoo.com
  6. echoo.com $00>null.txt
复制代码
如此也可方便生产0x00字符;

刚才看到15楼的询问,我还以为这个echoo.com 不方便生产0x1a,试了试也可以,不但可以,还可以生产任意"字符流",以至于可以生成我们想要的任何三方工具,非常惊喜!(未考虑速度)
  1. @echo off
  2. (echo Bj@jzh`0X-`/PPPPPPa(DE(DM(DO(Dh(Ls(Lu(LX(LeZRR]EEEUYRX2Dx=
  3. echo 0DxFP,0Xx.t0P,=XtGsB4o@$?PIyU!WvX0GwUY Wv;ovBX2Gv0ExGIuht6
  4. echo ?@xAyJHmH@=a?}VjuN?_LEkS?`w`s_{OCIvJDGEHtc{OCIKGMgELCI?GGg
  5. echo EL?s?WL`LRBcx=k_K?AxVD?fCo?Cd?BLDs0)>echoo.com
  6. echoo.com $00$1a$0d$0dplp626>test.txt
复制代码
这段神奇的代码让我产生了很大的兴趣,试了试,参数$不紧跟16进制的数据,比如
echoo.com $# 创建的是"-"
echoo.com $$创建 但是"="
而echoo.com $#$$ 又创建的不是"=-" 而是"4#"
这里是怎么对应的?
======================
qzw兄可否把这段代码给大伙讲解下。。。

TOP

题外话,我发这个帖子是因为对于ascii码0-255,除了0x00外,我都找到了可以在bat中用变量存放他们并加以利用的方法,可就这个0x00我没办法,

若能0x00可以被利用了,我惊讶的发现,bat 不靠任何外部命令,仅内部命令,便可以生产任何我想要的三方!
这就是我发现的秘密。
只是看来要用到ascode技术,那么人家的方案比我的简洁很多多多。。。
1

评分人数

TOP

plp的帖子我从此不看

TOP

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

qzw 开个专题讲解一下 ascode 吧

TOP

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

这是为神马...

TOP

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

TOP

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

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

TOP

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

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

TOP

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

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

有个疑问,你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

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

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

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

TOP

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

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

返回列表