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

【挑战】批处理如何创建仅含一个nul字符的文件

本帖最后由 plp626 于 2011-5-13 12:51 编辑

如题,如何用 cmd的内部命令 创建 仅含一个nul字符的文本文件

没有挑战的意思,只是问题难度较大

这个问题的思考了来源于 。。。 暂时 不好描述, 总之就是解决批处理的三方工具依赖性缺陷。

我知道用外部命令debug,fsutil可方便 创建ascii码为nul的字符 文件,但是,这和我解决问题的目的有些本末倒置。

思考片刻,无果,觉得不可能实现,不知大家有何看法。谢谢。。
===============================

PS: 批处理变量结束符为 NUL 字符,所以用变量的方法 ,我本人认为是行不通的,建议大家把注意力放在 copy prompt 。。。还有 for /f usebackq ('....')的bug,以及其他内部命令bug上,并加以利用(个人观点)

鉴于论坛过滤一些特殊的ascii码字符,大家给代码的时候描述思路或者上传源文件即可。

如果哪位能给个可行的思路,必将有一个惊喜产生。。。

还是娱乐,娱乐度 甚高!!

TOP

3# zm900612

那个制表符的获取用了变量

nul 不同于tab 是最特殊的字符

变量的值不可能含有 nul 字符, 除非你能找到cmd变量存储的bug加以利用

但这种技巧可遇不可求,或者你已经发现。

TOP

8# Bearxy


我也是从初学者过来,呵呵,慢慢来,看你的回复很可爱。

NUL 是asiic码值为0的那个控制字符,你搜索 下载 hedit (很小的体积)可以查看任意文件的 asiic码 信息。

TOP

本帖最后由 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

本帖最后由 plp626 于 2011-6-11 14:35 编辑

参考26楼的思路,某前得到如下结论:

批处理可以仅依赖外部命令findstr 生成仅含一个nul(ascii 0x00)字符的文件:
  1. cmd /u/cecho.>$.tmp
  2. findstr/vrc:$ $.tmp>0x00.txt
  3. del $.tmp
复制代码
1

评分人数

TOP

返回列表