Как получить список защищенных паролем *.xlsx файлов в каталоге, содержащем много файлов Excel?
Есть ли способ узнать, защищены ли файлы *.xlsx в папке паролем, прочитав каталог?
Пример каталога текстового файла
1.xlsx
2.xlsx
3.xlsx
4.xlsx
Пример текстового файла результатов
1.xlsx - защищено
2.xlsx
3.xlsx - защищено
4.xlsx
Я в основном хочу увидеть, какие из моего каталога защищены паролем, не пытаясь открыть их. Мне интересно, если есть переключатель каталога. Это на машине с Windows, кстати.
1 ответ
Это будет работать только для файлов OOXML. Так как файлы этого типа являются файлами ZIP, первые два байта в файле PK
если файл не защищен паролем.
Итак, предполагая, что все файлы для обработки являются офисными файлами OOXML, давайте проверим, является ли первый символ в файле P
, Чтобы поймать этого персонажа, мы будем использовать xcopy /w
, который будет ждать нажатия клавиши и повторять это нажатие клавиши. Чтобы захватить первый символ, просто перенаправьте файл в качестве ввода в xcopy, поэтому нажатие клавиши будет первым символом в файле. Если этот персонаж P
файл не защищен паролем.
@echo off
setlocal enableextensions enabledelayedexpansion
for %%a in (*.xlsx) do (
call :isOfficeFilePasswordProtected "%%a"
if errorlevel 1 (
echo %%a
) else (
echo %%a - protected
)
)
exit /b
:isOfficeFilePasswordProtected file
if not exist "%~1" exit /b 1
if %~z1 lss 1 exit /b 1
setlocal enableextensions disabledelayedexpansion
set "id=" & for /f "delims=" %%a in ('
xcopy /l /w "%~f0" "%~f0" 2^>nul ^<"%~1"
') do if not defined id set "id=%%a"
if "%id:~-1%"=="P" ( set "exitCode=1" ) else ( set "exitCode=0" )
endlocal & exit /b %exitCode%