如何在包含许多Excel文件的目录中获取受密码保护的* .xlsx文件列表?

时间:2014-10-01 21:30:55

标签: windows batch-file dir

有没有办法通过阅读目录来查看文件夹中的* .xlsx文件是否受密码保护?

示例目录文本文件

1.xlsx
2.xlsx
3.xlsx
4.xlsx

示例结果文本文件

1.xlsx - 受保护的 2.xlsx
3.xlsx - 受保护的 4.xlsx

我基本上想看看我的目录中哪些是密码保护而不试图打开它们。我想知道是否有目录切换。顺便说一句,这是在Windows机器上。

1 个答案:

答案 0 :(得分:0)

这仅适用于OOXML文件。由于这种文件是ZIP文件,文件中的前两个字节是PK,除非文件受密码保护。

因此,假设要处理的所有文件都是office 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%