[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
知道了技巧,退行容易,但是如何做到判断非空行数和不清空原来的内容呢?
写了个处理1.bat的半成品,目前在1.bat被call的时候表现尚可,但是直接运行1.bat时就问题大大的,因为无从猜测运行时会有几行的多余回显。
  1. '&echo off&cls&Start /wait wscript -e:vbs "%~f0"&findstr>>Unicode.tmp /v S %0&copy /b Unicode.tmp+1.bat Unicode.tmp&move Unicode.tmp 1.bat&exit
  2. Set Unicode = CreateObject("Scripting.FileSystemObject").CreateTextFile("Unicode.tmp",,True)
  3. ' 2>nul&@echo [请把此处替换为9个tab键]
复制代码
干脆上传一份算了,本楼代码就是那个《文件头加密.bat》,新建.bat用于创建新的1.bat,call.bat用于运行1.bat(没用到call命令,所以没出错,耶)看效果。
附件已更新

TOP

我晕,加了code以后回车被砍掉了,2楼代码第四行有个回车,不能省的。
那一大段tab和退格键本来可以用for /l稍作简化,但既然尚未竣工我也就懒得去搞了,意思意思就好

TOP

我没加@echo off啊,加@只是为了屏蔽本条命令的回显

TOP

貌似传错附件了...
好吧,我再上传一下,call是已测无误的,当然前提是在call之前已经echo off过了

TOP

echo;>a.txt
copy /b a.txt 要解密的文件
这样原来文件头是FF F0,解密后变成0D 0A FF F0,就不会被当成unicode格式了

TOP

  1. @echo off
  2. chcp 437
  3. wmic os>tmp
  4. set /p head=<tmp
  5. echo !head! 2^>nul>head
  6. copy /b head+%0 unicode
复制代码
或者[code]

晕,最简单的那个方案因为有特殊字符无法直接贴出来,请看附件

TOP

13# plp626


不是的,特殊字符是一个FF字符和一个汉字,分开没事,放在一起就发不了。
如果用那个函数的话,那直接生成fffe就行了,也无需再用别的方式

TOP

昨天在batman的帮助下,终于有了新突破:
  1. @find /v "find"<%~s0>样本文件.bat
  2. 文件头 2>nul 3>"[tab][tab] [tab][tab][tab][tab][tab][tab][tab][tab][tab][tab][tab]
  3. @(for %%a in (test) do echo test)>tmp
  4. @for /f "skip=2" %%a in (tmp) do @echo[tab][tab]
  5. echo 123
  6. pause
复制代码
在测试中的表现非常棒,能够区分关闭回显和打开回显的情况
现在唯一的心病就是对回显的判断了,如何摆脱临时文件呢?

TOP

复制代码双击生成样本文件(需调用ASCMap获取特殊字符):
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. chcp 437 >nul
  4. call ASCMap $
  5. echo !$:~0xff,1!!$:~0xfe,1!  2^>nul 3^>"!$:~0x9,1!!$:~0x9,1! !$:~0x9,1!!$:~0x9,1!!$:~0x9,1!!$:~0x9,1!!$:~0x9,1!!$:~0x9,1!!$:~0x9,1!!$:~0x9,1!!$:~0x9,1!!$:~0x9,1!!$:~0x9,1!
  6. echo @(for %%%%a in (test^) do echo test^)^>tmp
  7. echo @for /f "skip=2" %%%%a in (tmp^) do @echo !$:~0x9,1!!$:~0x9,1!
  8. echo echo 123
  9. echo pause
  10. )>样本文件.bat
  11. chcp 936 >nul
  12. echo  测试
  13. echo on
  14. 样本文件.bat
  15. pause
复制代码

TOP

17楼代码因为代码页的原因,未能生成样本...

以下是plp修改后的版本:
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set file=样本文件
  4. chcp 437 >nul
  5. call ASCMap $
  6. set t=!$:~9,1!
  7. (echo !$:~0xff,1!!$:~0xfe,1!  2^>nul 3^>"!t!!t! !t!!t!!t!!t!!t!!t!!t!!t!!t!!t!!t!
  8. echo @(for %%%%a in (test^) do echo test^)^>tmp
  9. echo @for /f "skip=2" %%%%a in (tmp^) do @echo !t!!t!
  10. echo echo 123
  11. echo pause
  12. )>!file!.bat
  13. chcp 936 >nul
  14. echo  测试
  15. echo on
  16. call 样本文件.bat
  17. pause
复制代码
测试成功
其中!$:~0xff,1!!$:~0xfe,1!代表fffe文件头,而!$:~9,1!为tab制表符

TOP

echo;>a.txt
copy /b a.txt 要解密的文件
这样原来文件头是FF F0,解密后变成0D 0A FF F0,就不会被当成unicode格式了
zm900612 发表于 2011-3-14 23:02



现在更好的解密方法是
  1. copy nul+a.bat 解密.bat
复制代码

TOP

返回列表