首页 > 解决方案 > 如何通过读取其内容而不是扩展名来识别给定文件是否是批处理文件?

问题描述

对于像 EXE、MSI 和 MSP 这样的可执行文件,我可以通过读取它的几个字节来检测文件类型。但我无法通过读取其内容来检测 BATCH 文件。用户可以更改 BATCH 文件扩展名,因此我不想依赖扩展名来检测 BATCH 文件。有没有办法通过以编程方式读取其内容来检测 BATCH 文件?

任何帮助将不胜感激。

标签: batch-file

解决方案


注意:正如 Compo 所说,如果没有复杂的算法,就没有明确的方法可以做到这一点,而且这个问题在超级用户或其他平台上会好得多(你们中的一些人可能不喜欢这个,但未来的观众可以得到一些得到它的帮助,投反对票也没关系——我会在一段时间内删除这条消息)。

这里有一个批处理文件可以帮助您完成程序(不完全是您的答案)。

@echo off
rem probably the batch file isn't well written.you can add commands for better detection
rem and also might have great limitations 
rem improvements are welcomed
set file=%1
findstr /C:"@echo off" /C:"set" /C:"set /p" /C:"pause" /C:"echo" /C:"pause >nul" /C:"cd" /C:"call" /C:"goto" /C:"if" /C:"type" /C:"rem" /C:"copy" /C:"move" /C:"cls" /C:"wmic" %file% >nul
if %errorlevel%==0 (
echo Appears to be a batch file
) else (
echo Doesn't appear to be a batch file
)

推荐阅读