Ниже приведен пакетный файл, который будет запускаться corflags.exe
для всех dlls
и exes
в текущем рабочем каталоге и во всех подкаталогах, анализировать результаты и отображать целевую архитектуру каждого из них.
В зависимости от используемой версии corflags.exe
позиции в выходных данных будут включать 32BIT
, или 32BITREQ
(и 32BITPREF
). Независимо от того, что из этих двух включено в выходные данные, это критическая позиция, которую необходимо проверить, чтобы различить Any CPU
и x86
. Если вы используете более старую версию corflags.exe
(до Windows SDK v8.0A), то в выводе будет присутствовать только позиция 32BIT
, как другие указывали в предыдущих ответах. В противном случае 32BITREQ
и 32BITPREF
замените его.
Предполагается, что corflags.exe
находится в %PATH%
. Самый простой способ убедиться в этом - использовать Developer Command Prompt
. В качестве альтернативы вы можете скопировать его из местоположения по умолчанию .
Если приведенный ниже пакетный файл запущен для неуправляемого dll
или exe
, он будет некорректно отображаться как x86
, поскольку фактический вывод Corflags.exe
будет сообщением об ошибке, похожим на:
corflags: ошибка CF008: указанный файл не имеет действительного управляемого заголовка
@echo off
echo.
echo Target architecture for all exes and dlls:
echo.
REM For each exe and dll in this directory and all subdirectories...
for %%a in (.exe, .dll) do forfiles /s /m *%%a /c "cmd /c echo @relpath" > testfiles.txt
for /f %%b in (testfiles.txt) do (
REM Dump corflags results to a text file
corflags /nologo %%b > corflagsdeets.txt
REM Parse the corflags results to look for key markers
findstr /C:"PE32+">nul .\corflagsdeets.txt && (
REM `PE32+` indicates x64
echo %%~b = x64
) || (
REM pre-v8 Windows SDK listed only "32BIT" line item,
REM newer versions list "32BITREQ" and "32BITPREF" line items
findstr /C:"32BITREQ : 0">nul /C:"32BIT : 0" .\corflagsdeets.txt && (
REM `PE32` and NOT 32bit required indicates Any CPU
echo %%~b = Any CPU
) || (
REM `PE32` and 32bit required indicates x86
echo %%~b = x86
)
)
del corflagsdeets.txt
)
del testfiles.txt
echo.