Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
File 批处理:从文件中读取n个字节_File_Batch File_Binary - Fatal编程技术网

File 批处理:从文件中读取n个字节

File 批处理:从文件中读取n个字节,file,batch-file,binary,File,Batch File,Binary,我需要从文件中读取前n个字节,以确保文件确实是Word文件(.docx)(忽略扩展名) 如何执行此操作?通过fsutil文件截断读取第一个n字节(首先复制原始文件): 注意: 使用makecab和内置的cmd命令从代码页437生成,或fsutil空字节 更新: 下面是获取文件前3个字节的VBatch混合代码: @echo off echo Set fso=CreateObject("Scripting.FileSystemObject") > some.vbs echo

我需要从文件中读取前n个字节,以确保文件确实是Word文件(.docx)(忽略扩展名)


如何执行此操作?

通过
fsutil
文件截断读取第一个n字节(首先复制原始文件):

注意: 使用
makecab
和内置的
cmd
命令从代码页437生成,或
fsutil
空字节

更新:

下面是获取文件前3个字节的VBatch混合代码:

@echo off
echo Set fso=CreateObject("Scripting.FileSystemObject") > some.vbs
echo Set f=fso.OpenTextFile("%~1"):buf=f.Read(3):f.Close >> some.vbs
REM OpenTextFile opens any file as a binary stream; f.read(n) reads the first n bytes of that stream
echo wscript.echo Hex(ASCb(mid(buf,1,1))) ^& "," ^& Hex(ASCb(mid(buf,2,1))) ^& "," ^& Hex(ASCb(mid(buf,3,1))) >> some.vbs

for /f "tokens=1-3 delims=," %%A in ('cscript //nologo some.vbs') do (
   set byte1=0%%A
   set byte2=0%%B
   set byte3=0%%C
   )
echo %byte1:~-2% %byte2:~-2% %byte3:~-2%

在Win 10 CMD中测试

您想如何区分
.docx
.zip
powershell-命令获取内容-编码字节-总计计数20“'file name.docx'”
但请记住@Stephan's right notice.JosefZ,您的解决方案非常有效。非常感谢。你认为有一种批量生产的替代方案吗?(我必须将此代码嵌入到现有的批处理脚本中)。我看不到任何限制。例如,您可以使用读取和处理输出。第一个
FSUTIL file seteof
仅在具有管理员权限的情况下工作,但第二个示例在经过一些修改后工作。我使用的是Win 10.0.17134,它在用户级别工作,没有提升。第二个我在运行测试后复制/粘贴了代码,没有修改;在粘贴代码之前,一些系统可能需要Win 10上的
cmd/v:on
,其他系统可能需要包括额外的行:
SETLOCAL EnableDelayedExpansion
我刚刚用10.0.18363.1379测试了它,fsutil在没有提升的情况下失败。第二个可以转换为批处理文件以始终工作。在命令行上,默认情况下禁用延迟扩展,矿山在没有高程的情况下工作;我也读过一些关于其他人的帖子,他们也设法在没有仰角的情况下跑步。延迟扩展的默认设置是正确的;这是去年的事。我在那篇文章上的回答启用了默认设置。
set n=3
set file=test.one
fsutil file createnew A %n%
fc /b A %file% > B & del A
set /a n=%n%-1 >Nul
for /l %j in (0,1,%n%) do cmd /c exit /b %j & set hex=!=exitcode:~-2!& (find "!hex!: "<B || echo doh: la 00)>> A
(for /f "tokens=3" %i in (A) do set /p=%i <nul) & del A & del B
@echo off
echo Set fso=CreateObject("Scripting.FileSystemObject") > some.vbs
echo Set f=fso.OpenTextFile("%~1"):buf=f.Read(3):f.Close >> some.vbs
REM OpenTextFile opens any file as a binary stream; f.read(n) reads the first n bytes of that stream
echo wscript.echo Hex(ASCb(mid(buf,1,1))) ^& "," ^& Hex(ASCb(mid(buf,2,1))) ^& "," ^& Hex(ASCb(mid(buf,3,1))) >> some.vbs

for /f "tokens=1-3 delims=," %%A in ('cscript //nologo some.vbs') do (
   set byte1=0%%A
   set byte2=0%%B
   set byte3=0%%C
   )
echo %byte1:~-2% %byte2:~-2% %byte3:~-2%