A może "przetwórz" plik dane.txt za pomocą VBScript.
dla przykładu
dane.txt [ dwa ostatnie wiersze dla testu: dublującej się nazwy lub nazwa pliku, który nie istnieje ]
01nazwisko.pdf=Moje01haslo
04nazwisko.pdf=Moje04haslo
05nazwisko.pdf=Moje05haslo
07nazwisko.pdf=Moje07haslo
01nazwisko.pdf=Moje01haslo
10nazwisko.pdf=Moje10haslo
dane_2_pass.vbs [ edit ]
Option Explicit
Dim oFso, oShell, oFile
Dim sWorkingFolder, sFullPathForDataFile
Dim sPrompt, sTitle
Dim arrLines, arrLine, sFileData, sLine, sLinesToWrite
Const DATA_FILE_MAIN = "dane.txt", _
DATA_FILE_PASS = "dane_pass.txt"
Const FOR_READING = 1, FOR_WRITING = 2, OVERWRITE_FILE = True
Dim GS_ARGUMENTS
GS_ARGUMENTS = "-sDEVICE=pdfwrite -dCompatibilityLevel=1.4 " & _
"-dBATCH -dNOPROMPT -dNOPAUSE -dQUIET " & _
"-sOwnerPassword={{password}} -sUserPassword=manan " & _
"-sOutputFile='{{file_name_pass}}' '{{file_name}}'"
Set oShell = CreateObject("WScript.Shell")
Set oFso = CreateObject("Scripting.FileSystemObject")
sWorkingFolder = oShell.CurrentDirectory
sFullPathForDataFile = oFso.BuildPath(sWorkingFolder, DATA_FILE_MAIN)
If oFso.FileExists(sFullPathForDataFile) Then
' Odczytanie danych z pliku: dane.txt
sFileData = oFso.OpenTextFile(sFullPathForDataFile, FOR_READING).ReadAll
arrLines = Split(sFileData, vbCrLf)
For Each sLine In arrLines
If Not Trim(sLine) = vbNullString Then
arrLine = Split(sLine, "=")
If oFso.FileExists(oFso.BuildPath(sWorkingFolder, arrLine(0))) Then
If Not InString(sLinesToWrite, arrLine(0)) Then
sLinesToWrite = sLinesToWrite & GS_ARGUMENTS & vbCrLf
sLinesToWrite = Replace(sLinesToWrite, "{{password}}", arrLine(1), 1, -1, 1)
sLinesToWrite = Replace(sLinesToWrite, "{{file_name_pass}}", InsertAsSuffix(arrLine(0), "_pass"), 1, -1, 1)
sLinesToWrite = Replace(sLinesToWrite, "{{file_name}}", arrLine(0), 1, -1, 1)
End If
End If
End If
Next
If Len(sLinesToWrite) > 0 Then
' Zapisanie danych do pliku: dane_pass.txt
Set oFile = oFso.CreateTextFile(oFso.BuildPath(sWorkingFolder, DATA_FILE_PASS), OVERWRITE_FILE)
oFile.WriteLine sLinesToWrite
oFile.Close
Set oFile = Nothing
Else
sTitle = "Zwroc uwage na ..."
sPrompt = Space(4) & "W zadanym folderze:" & vbCrLf & vbCrLf & _
Space(4) & sWorkingFolder & vbCrLf & vbCrLf & _
Space(4) & "nie odnaleziono plikow z listy w pliku: " & DATA_FILE_MAIN
Msgbox sPrompt, vbExclamation + vbOKOnly, sTitle
End If
Else
sTitle = "Zwroc uwage na ..."
sPrompt = Space(4) & "W zadanym folderze:" & vbCrLf & vbCrLf & _
Space(4) & sWorkingFolder & vbCrLf & vbCrLf & _
Space(4) & "nie odnaleziono pliku: " & DATA_FILE_MAIN
Msgbox sPrompt, vbExclamation + vbOKOnly, sTitle
End If
Set oFso = Nothing
Set oShell = Nothing
WScript.Quit 1
Function InString(sString, sSearch)
On Error Resume Next
If InStr(1, sString, sSearch, 1) Then
InString = True
Else
InString = False
End If
If Not Err.Number = 0 Then
Err.Clear
InString = False
End If
End Function
Function InsertAsSuffix(sString, sSuffix)
On Error Resume Next
Dim arrSplit
arrSplit = Split(sString, ".")
InsertAsSuffix = arrSplit(0) & sSuffix & "." & arrSplit(1)
If Not Err.Number = 0 Then
Err.Clear
InsertAsSuffix = sString Or vbNullString
End If
End Function
plik "wyjściowy"
dane_pass.txt
-sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dBATCH -dNOPROMPT -dNOPAUSE -dQUIET -sOwnerPassword=Moje01haslo -sUserPassword=manan -sOutputFile='01nazwisko_pass.pdf' '01nazwisko.pdf'
-sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dBATCH -dNOPROMPT -dNOPAUSE -dQUIET -sOwnerPassword=Moje04haslo -sUserPassword=manan -sOutputFile='04nazwisko_pass.pdf' '04nazwisko.pdf'
-sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dBATCH -dNOPROMPT -dNOPAUSE -dQUIET -sOwnerPassword=Moje05haslo -sUserPassword=manan -sOutputFile='05nazwisko_pass.pdf' '05nazwisko.pdf'
-sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dBATCH -dNOPROMPT -dNOPAUSE -dQUIET -sOwnerPassword=Moje07haslo -sUserPassword=manan -sOutputFile='07nazwisko_pass.pdf' '07nazwisko.pdf'
todo_gs.bat czy todo_gs.cmd
@echo off
:start
cls
echo Processing file dane.txt to dane_pass.txt
echo.
start dane_2_pass.vbs
pause
echo.
for /f "delims=," %%G in (dane_pass.txt) do (
gs %%G
)
echo.
pause
lub
@echo off
:start
cls
echo.
echo Processing file dane.txt to dane_pass.txt
start /WAIT dane_2_pass.vbs
echo.
for /f "delims=," %%G in (dane_pass.txt) do (
gs %%G
)
echo.
pause
P.S Osobiście, jak bym robił to dla siebie, użył bym zamiast VBScript-u i skryptu cmd, Python-a, ale nie wiem czy możesz użyć Python-a, za to VBScript jest "wbudowany" w Windows-a.