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

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

TOP

以下的代码利用外部命令 findstr 达成目的, 但楼主明确要求 不使用任何外部命令,
期待完全符合楼主期望的代码.>> bin.txt findstr /v /r /c "%~0"
REM statements
REM command...

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

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

TOP

33# Demon


汗一个,当时没看明白,现在一回顾才有点懂了,确实可行

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

搞毛线啊,弄那么复杂。
type nul>1.txt
0字节的空文件,不晓得是不是这个意思。

TOP

回复 36# yiwuyun


    是你理解错了,仅含一个nul字符的文本文件不是0字节空文件。

TOP

回复 37# DAIC


   你试了我的代码吗。1.txt中就不是NUL字符。是0x00

TOP

回复 38# yiwuyun


    请问你的测试环境是……?我这里type nul>1.txt也仅是建一个空白文件而已,没有任何内容。不含0x00字节。

TOP

回复 38# yiwuyun


测试环境:Win7 SP1 x64
没看到0x00在哪里。你是怎么看到的?

c:\Test>type nul>1.txt

c:\Test>xxd 1.txt

c:\Test>

其实有一个非常简单的方法来判断,如果文件里面包含NUL(0x00),它的文件大小不可能是零。
你也试试别人的代码吧,看看是不是跟你自己的代码得到的结果不一样:

c:\Test>cmd /u/cecho.>$.tmp

c:\Test>findstr/vrc $.tmp>2.txt

c:\Test>xxd 2.txt
0000000: 00                                       .

c:\Test>

TOP

不用外部指令就没法实现
  1. fsutil file createnew (filename) 1
复制代码
1

评分人数

TOP

re: qzwqzw

有个疑问,你14楼的代码为什么要多一行 echoo >nul?如此也可方便生产0x00字符;

刚才看到 ...
plp626 发表于 2011-5-14 13:27


echoo.com $# 创建的是"-"
echoo.com $$创建 但是"="

echoo.com $$$# 又创建的不是"=-" 而是"4#"

TOP

如是想生成一个空文件,如下命令即可(在命令提示符中)
type nul>cheng.txt

TOP

原生的外部命令最容易的方式
41楼
http://bbs.bathome.net/redirect. ... 2284&pid=165948

TOP

本帖最后由 老刘1号 于 2017-7-17 15:39 编辑
  1. >tmp Echo AA==
  2. certutil -decode tmp null.txt
  3. del tmp
复制代码
base64看多了……现在直接手写…

TOP

返回列表