[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]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

让我想起了batman那个获取制表符函数所用的方法...

TOP

3# zm900612

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

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

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

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

TOP

cmd /u /c echo asdfasdfasdf之类的可以生成带nul的输出,但是没想到如何提取,用delims试过似乎也不行

TOP

有难度,先占楼思考。。。
***共同提高***

TOP

可执行文件的头部就是固定的格式,包含了NUL字符,用 type %windir%\system32\cmd.exe 或者 findstr MZ %windir%\system32\cmd.exe 就能得到包含 NUL 的字符串了,试了一下无法提取,CMD存变量的时候好像自动给搞掉了。

TOP

囧啊,初学者看不懂.难道是ECHO.NUL>TEST.TXT

TOP

8# Bearxy


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

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

TOP

本帖最后由 Bearxy 于 2011-5-13 23:41 编辑

9# plp626
呵呵,我看过上次你和别人论证的那个帖.
所以猜到你出的题可能不会是那么简单……但没办法呀,batman不是一直说重在参与么

TOP

抛砖了:
  1. @echo off
  2. (echo A100&echo MOV DL,00&echo MOV AH,02&echo INT 21&echo INT 20&echo,&echo G&echo q)>db
  3. for /f "skip=8 delims=Progamteindly" %%a in ('debug^<db') do set/p=%%a<nul>a.txt&goto next
  4. :next
  5. del /q db
复制代码
***共同提高***

TOP

本帖最后由 hanyeguxing 于 2011-5-14 03:31 编辑
  1. fsutil file createnew 125.txt 1
复制代码
批处理中cmd用 iswspace () 直接检查变量、参数、文件名等字符串中的空字符并进行处理,所以set/p和for/f以及echo等都不能用,只能考虑那些直接操作文件的命令。more把空字符当换行处理;就剩下type、copy等这些了;可只用他们怎么把包含空字符的文件拆开呢?
寒夜孤星:在没有说明的情况下,本人所有代码均运行在 XP SP3 下 (有问题请发贴,QQ临时会话已关闭)

TOP

12# hanyeguxing
我上面的代码就是用的set /p输出,生成的就是1字节的空文本啊。。。
***共同提高***

TOP

本帖最后由 qzwqzw 于 2011-5-14 10:59 编辑

11楼的代码也犯了本末倒置的错误了
生成0字节是为了避免使用外部命令
结果你却使用外部命令debug生成了0字节

如果允许用debug
那么直接用e命令就可以直接写任何字节了
何必还要用a命令汇编dos中断呢?
  1. @echo off
  2. for %%f in (e100 00 rcx 1 nnull.txt w q) do echo %%f>>debug.scr
  3. debug < debug.scr >nul
复制代码
对于这个问题
我能想到的仍然是ASCODE方案
因为它本身就是为了解决第三方工具依赖而出现的
生成0字节只是一个小小的副产物而已
  1. @echo off
  2. echo Bj@jzh`0X-`/PPPPPPa(DE(DM(DO(Dh(Ls(Lu(LX(LeZRR]EEEUYRX2Dx=>echoo.com
  3. echo 0DxFP,0Xx.t0P,=XtGsB4o@$?PIyU!WvX0GwUY Wv;ovBX2Gv0ExGIuht6>>echoo.com
  4. echo ?@xAyJHmH@=a?}VjuN?_LEkS?`w`s_{OCIvJDGEHtc{OCIKGMgELCI?GGg>>echoo.com
  5. echo EL?s?WL`LRBcx=k_K?AxVD?fCo?Cd?BLDs0>>echoo.com
  6. echoo >nul
  7. echoo.com $00>null.txt
  8. del echoo.com
复制代码
3

评分人数

    • zm900612: 技术技术 + 1
    • plp626: 我也想到这个,就是不懂;惊喜~技术 + 1
    • batman: 牛人!技术 + 1
天的白色影子

TOP

倒是想起另外一个类似的问题
如何生成一个仅含1个eof字符的文件
eof即文件结束符
ASCII码十六进制形式为0x1A
天的白色影子

TOP

返回列表