有沒有辦法通過讀取目錄來查看文件夾中的* .xlsx文件是否受密碼保護?如何在包含多個Excel文件的目錄中獲取受密碼保護的* .xlsx文件的列表?
實例目錄的文本文件
1.xlsx
2.xlsx
3.xlsx
4.xlsx
示例結果的文本文件
1.xlsx - 保護
2.xlsx
3.xlsx - 保護
4.xlsx
我基本上想看看哪些出我的目錄密碼保護沒有試圖打開它們。我想知道是否有目錄切換。順便說一下,這是在Windows機器上。
有沒有辦法通過讀取目錄來查看文件夾中的* .xlsx文件是否受密碼保護?如何在包含多個Excel文件的目錄中獲取受密碼保護的* .xlsx文件的列表?
實例目錄的文本文件
1.xlsx
2.xlsx
3.xlsx
4.xlsx
示例結果的文本文件
1.xlsx - 保護
2.xlsx
3.xlsx - 保護
4.xlsx
我基本上想看看哪些出我的目錄密碼保護沒有試圖打開它們。我想知道是否有目錄切換。順便說一下,這是在Windows機器上。
這隻適用於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%
這工作,是非常有益的..我有一個問題。 ..部分'isOfficeFilePasswordProtected'這是從哪裏來的? – JDE876 2014-10-02 15:07:25
@ JDE876,我不得不命名它。辦公室在密碼保護時加密文件,所以......但是這是一個子程序,可以根據需要命名。 – 2014-10-02 15:40:54
加密是什麼意思? NTFS加密或密碼保護的文件? – npocmaka 2014-10-01 21:42:57
@npocmaka密碼保護文件 – JDE876 2014-10-01 21:52:31
這可能會給你一些線索:https://en.wikipedia.org/wiki/Office_Open_XML - 與「解壓縮」的東西可能工作 – 2014-10-02 01:04:30