找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 112890|回复: 46

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

[复制链接]
发表于 2011-5-13 12:49:40 | 显示全部楼层 |阅读模式
本帖最后由 plp626 于 2011-5-13 12:51 编辑

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

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

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

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

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

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

鉴于论坛过滤一些特殊的ascii码字符,大家给代码的时候描述思路或者上传源文件即可。
 楼主| 发表于 2011-5-13 13:05:49 | 显示全部楼层
如果哪位能给个可行的思路,必将有一个惊喜产生。。。

还是娱乐,娱乐度 甚高!!
发表于 2011-5-13 13:13:54 | 显示全部楼层
让我想起了batman那个获取制表符函数所用的方法...
 楼主| 发表于 2011-5-13 13:21:33 | 显示全部楼层
3# zm900612

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

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

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

但这种技巧可遇不可求,或者你已经发现。
发表于 2011-5-13 13:57:03 | 显示全部楼层
cmd /u /c echo asdfasdfasdf之类的可以生成带nul的输出,但是没想到如何提取,用delims试过似乎也不行
发表于 2011-5-13 15:36:16 | 显示全部楼层
有难度,先占楼思考。。。
发表于 2011-5-13 16:30:12 | 显示全部楼层
可执行文件的头部就是固定的格式,包含了NUL字符,用 type %windir%\system32\cmd.exe 或者 findstr MZ %windir%\system32\cmd.exe 就能得到包含 NUL 的字符串了,试了一下无法提取,CMD存变量的时候好像自动给搞掉了。
发表于 2011-5-13 17:40:33 | 显示全部楼层
囧啊,初学者看不懂.难道是ECHO.NUL>TEST.TXT
 楼主| 发表于 2011-5-13 20:43:28 | 显示全部楼层
8# Bearxy


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

NUL 是asiic码值为0的那个控制字符,你搜索 下载 hedit (很小的体积)可以查看任意文件的 asiic码 信息。
发表于 2011-5-13 23:30:48 | 显示全部楼层
本帖最后由 Bearxy 于 2011-5-13 23:41 编辑

9# plp626
呵呵,我看过上次你和别人论证的那个帖.
所以猜到你出的题可能不会是那么简单……但没办法呀,batman不是一直说重在参与么
发表于 2011-5-14 00:10:57 | 显示全部楼层
抛砖了:

  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
复制代码
发表于 2011-5-14 02:49:36 | 显示全部楼层
本帖最后由 hanyeguxing 于 2011-5-14 03:31 编辑
  1. fsutil file createnew 125.txt 1
复制代码
批处理中cmd用 iswspace () 直接检查变量、参数、文件名等字符串中的空字符并进行处理,所以set/p和for/f以及echo等都不能用,只能考虑那些直接操作文件的命令。more把空字符当换行处理;就剩下type、copy等这些了;可只用他们怎么把包含空字符的文件拆开呢?
发表于 2011-5-14 09:36:31 | 显示全部楼层
12# hanyeguxing
我上面的代码就是用的set /p输出,生成的就是1字节的空文本啊。。。
发表于 2011-5-14 10:43:50 | 显示全部楼层
本帖最后由 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技术 +3 收起 理由
zm900612 + 1 技术
plp626 + 1 我也想到这个,就是不懂;惊喜~
batman + 1 牛人!

查看全部评分

发表于 2011-5-14 10:49:08 | 显示全部楼层
倒是想起另外一个类似的问题
如何生成一个仅含1个eof字符的文件
eof即文件结束符
ASCII码十六进制形式为0x1A
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-16 23:30 , Processed in 0.013926 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表