JohnD59 / work

0 stars 0 forks source link

測試#自動列印文件夾內的文件(EXCEL,WORD,PDF) 並且按照檔案名稱順序 #6

Open JohnD59 opened 1 year ago

JohnD59 commented 1 year ago

@echo off setlocal enableextensions

REM 設定要列印的文件夾路徑 set "folder=%~dp0"

REM 列出資料夾下的所有Excel、Word和PDF文件,按照檔案名稱排序 for /f "delims=" %%f in ('dir /b /o:n /a-d "%folder%*.doc" "%folder%*.docx" "%folder%*.xls" "%folder%*.xlsx" "%folder%*.pdf"') do (

REM 使用預設印表機進行列印
start /wait /min /b /d "%printer%" "%folder%\%%~f"

)

REM 顯示結束消息 echo Printing complete. pause

JohnD59 commented 1 year ago

@echo off setlocal enabledelayedexpansion

REM 獲取當前目錄 set "dir=%~dp0"

REM 判斷是否存在待列印文件 set "files=0" for /f "delims=" %%i in ('dir /b /a-d "%dir%"') do ( set /a "files+=1" )

if %files% equ 0 ( echo No files to print. goto :eof )

REM 將文件按照文件名稱排序 set "i=0" for /f "delims=" %%i in ('dir /b /a-d /on "%dir%"') do ( set /a "i+=1" set "file!i!=%%i" )

REM 列印文件 for /l %%i in (1,1,%i%) do ( set "filename=!file%%i!" set "extension=!filename:~-3!"

if /i "!extension!"=="pdf" (
    echo Printing !filename!
    start "" "!filename!"
    ping -n 2 127.0.0.1 >nul
    taskkill /im AcroRd32.exe >nul 2>&1
) else if /i "!extension!"=="doc" (
    echo Printing !filename!
    start "" /wait "!filename!"
    ping -n 2 127.0.0.1 >nul
    taskkill /im WINWORD.EXE >nul 2>&1
) else if /i "!extension!"=="xls" (
    echo Printing !filename!
    start "" /wait "!filename!"
    ping -n 2 127.0.0.1 >nul
    taskkill /im EXCEL.EXE >nul 2>&1
)

)

echo Done.

JohnD59 commented 1 year ago

Option Explicit

Dim folderPath, fso, folder, files, file, extension, shell

' 獲取當前目錄 folderPath = CreateObject("Scripting.FileSystemObject").GetAbsolutePathName(".")

' 創建 FileSystemObject Set fso = CreateObject("Scripting.FileSystemObject")

' 打開文件夾 Set folder = fso.GetFolder(folderPath)

' 獲取所有文件 Set files = folder.Files

' 將文件按照文件名稱排序 Set files = SortFiles(files)

' 列印文件 For Each file in files extension = fso.GetExtensionName(file.Path)

If LCase(extension) = "pdf" Then
    ' 打印 PDF 文件
    Set shell = CreateObject("WScript.Shell")
    shell.Run """" & file.Path & """", 0, True
    WScript.Sleep 10000
    shell.SendKeys "^p"
    WScript.Sleep 5000
    shell.SendKeys "{ENTER}"
    WScript.Sleep 5000
    shell.SendKeys "%{F4}"
ElseIf LCase(extension) = "doc" Or LCase(extension) = "docx" Then
    ' 打印 Word 文件
    Set shell = CreateObject("WScript.Shell")
    shell.Run """" & file.Path & """ /q /n", 0, True
    WScript.Sleep 10000
    shell.SendKeys "^p"
    WScript.Sleep 5000
    shell.SendKeys "{ENTER}"
    WScript.Sleep 5000
    shell.SendKeys "%{F4}"
ElseIf LCase(extension) = "xls" Or LCase(extension) = "xlsx" Then
    ' 打印 Excel 文件
    Set shell = CreateObject("WScript.Shell")
    shell.Run """" & file.Path & """ /e /p", 0, True
    WScript.Sleep 10000
    shell.SendKeys "%{F4}"
End If

Next

' 釋放資源 Set shell = Nothing Set files = Nothing Set folder = Nothing Set fso = Nothing

' 函數:按照文件名稱排序文件 Function SortFiles(files) Dim arrFiles, i, j, temp ReDim arrFiles(files.Count - 1) i = 0 For Each file in files arrFiles(i) = file.Path i = i + 1 Next For i = 0 To UBound(arrFiles) For j = i + 1 To UBound(arrFiles) If arrFiles(i) > arrFiles(j) Then temp = arrFiles(i) arrFiles(i) = arrFiles(j) arrFiles(j) = temp End If Next Next Set SortFiles = CreateObject("Scripting.Dictionary") For i = 0 To UBound(arrFiles) SortFiles.Add i, CreateObject("Scripting.File").OpenTextFile(arrFiles(i), 1) Next End Function

JohnD59 commented 1 year ago

Set objFSO = CreateObject("Scripting.FileSystemObject") strFolder = Left(WScript.ScriptFullName, InStrRev(WScript.ScriptFullName, "\")) Set objFolder = objFSO.GetFolder(strFolder) Set colFiles = objFolder.Files

For Each objFile in colFiles Set objShell = CreateObject("Shell.Application") Set objFolder = objShell.Namespace(0).ParseName(objFile.Name) Set objFolderItemVerb = objFolder.Verbs().Item("Print") objFolderItemVerb.DoIt Next