Как получить список защищенных паролем *.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%
Другие вопросы по тегам