2014-10-01 40 views
1

有沒有辦法通過讀取目錄來查看文件夾中的* .xlsx文件是否受密碼保護?如何在包含多個Excel文件的目錄中獲取受密碼保護的* .xlsx文件的列表?

實例目錄的文本文件

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

示例結果的文本文件

1.xlsx - 保護
2.xlsx
3.xlsx - 保護
4.xlsx

我基本上想看看哪些出我的目錄密碼保護沒有試圖打開它們。我想知道是否有目錄切換。順便說一下,這是在Windows機器上。

+0

加密是什麼意思? NTFS加密或密碼保護的文件? – npocmaka 2014-10-01 21:42:57

+0

@npocmaka密碼保護文件 – JDE876 2014-10-01 21:52:31

+0

這可能會給你一些線索:https://en.wikipedia.org/wiki/Office_Open_XML - 與「解壓縮」的東西可能工作 – 2014-10-02 01:04:30

回答

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% 
+0

這工作,是非常有益的..我有一個問題。 ..部分'isOfficeFilePasswordProtected'這是從哪裏來的? – JDE876 2014-10-02 15:07:25

+0

@ JDE876,我不得不命名它。辦公室在密碼保護時加密文件,所以......但是這是一個子程序,可以根據需要命名。 – 2014-10-02 15:40:54

相關問題