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

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

[复制链接]
发表于 2011-5-18 13:57:16 | 显示全部楼层
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再结束输入,好奇之下试了试,似乎也没有效果。
发表于 2011-5-18 14:00:37 | 显示全部楼层
还有,上次寒夜孤星教过我们如何用debug查看内存中的环境变量,cmd中的环境变量以00为分隔符,内存中的内容我们甚至都没法转义,这大概就像变量替换中的“=”一样,恐怕拿它没办法,所以plp在顶楼说nul无法用变量获取
发表于 2011-5-31 14:26:40 | 显示全部楼层
以下的代码利用外部命令 findstr 达成目的, 但楼主明确要求 不使用任何外部命令,
期待完全符合楼主期望的代码.>> bin.txt findstr /v /r /c "%~0"
REM statements
REM command...

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

最简单的方法居然无人问津,真是悲哀
发表于 2011-5-31 14:42:11 | 显示全部楼层
33# Demon


汗一个,当时没看明白,现在一回顾才有点懂了,确实可行
 楼主| 发表于 2011-6-11 14:34:24 | 显示全部楼层
本帖最后由 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
复制代码

评分

参与人数 1PB +2 收起 理由
zm900612 + 2 26楼方案的升级版

查看全部评分

发表于 2014-11-25 07:46:03 | 显示全部楼层
搞毛线啊,弄那么复杂。
type nul>1.txt
0字节的空文件,不晓得是不是这个意思。
发表于 2014-11-25 08:37:09 | 显示全部楼层
回复 36# yiwuyun


    是你理解错了,仅含一个nul字符的文本文件不是0字节空文件。
发表于 2014-11-25 09:20:26 | 显示全部楼层
回复 37# DAIC


   你试了我的代码吗。1.txt中就不是NUL字符。是0x00
发表于 2014-11-25 09:32:11 | 显示全部楼层
回复 38# yiwuyun


    请问你的测试环境是……?我这里type nul>1.txt也仅是建一个空白文件而已,没有任何内容。不含0x00字节。
发表于 2014-11-25 11:19:18 | 显示全部楼层
回复 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>
发表于 2015-4-5 15:40:28 | 显示全部楼层
不用外部指令就没法实现
  1. fsutil file createnew (filename) 1
复制代码

评分

参与人数 1技术 +1 收起 理由
aa77dd@163.com + 1 原生的外部命令最容易的方式

查看全部评分

发表于 2015-4-5 15:59:06 | 显示全部楼层
re: qzwqzw

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

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


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

echoo.com $$$# 又创建的不是"=-" 而是"4#"
发表于 2015-6-3 07:49:53 | 显示全部楼层
如是想生成一个空文件,如下命令即可(在命令提示符中)
type nul>cheng.txt
发表于 2016-10-17 15:39:39 | 显示全部楼层
原生的外部命令最容易的方式
41楼
http://bbs.bathome.net/redirect. ... 2284&pid=165948
发表于 2017-5-10 23:30:48 | 显示全部楼层
本帖最后由 老刘1号 于 2017-7-17 15:39 编辑
  1. >tmp Echo AA==
  2. certutil -decode tmp null.txt
  3. del tmp
复制代码
base64看多了……现在直接手写…
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-17 01:46 , Processed in 0.025128 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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