okidoki
Goto Top

XLSX Tabellenblatt direkt drucken funktioniert nicht

Guten Morgen zusammen,

schon seit langer Zeit nutze ich eine kleine Batch, um eine bestimmtes Tabellenblatt (hier: Sheet_test) einer Excel-Datei (hier: %Pfad%%Name%%Typ%) auszudrucken. Das funktionierte bisher immer problemlos. Auch im Forum ist das ein Thema, z.B.
Druckverfahren

Nun hat mich leider die Druckfunktion verlassen:
 >print.vbs ECHO Set appXLS = CreateObject("Excel.Application")  
>>print.vbs ECHO Set wbkXLS = appXLS.Workbooks.Open("%Pfad%%Name%%Typ%", , true)  
>>print.vbs ECHO wbkXLS.sheets("Sheet_test").PrintOut  
>>print.vbs ECHO wbkXLS.Close 0
>>print.vbs ECHO Set wbkXLS = Nothing
>>print.vbs ECHO appXLS.Quit
>>print.vbs ECHO Set appXLS = Nothing
print.vbs
del print.vbs
und ich erhalte folgende Fehlermeldung:
Fehlermeldung:
Zeile: 3
Zeichen: 1
Fehler: Die PrintOut-Methode des Worksheet-Objektes konnte nicht ausgeführt werden.
Code: 800A03EC
Quelle: Microsoft Excel

Kann mir jemand bei der Lösung des Knotens helfen?

Gruß okidoki

Content-ID: 643444

Url: https://administrator.de/forum/xlsx-tabellenblatt-direkt-drucken-funktioniert-nicht-643444.html

Ausgedruckt am: 22.12.2024 um 18:12 Uhr

H41mSh1C0R
H41mSh1C0R 22.01.2021 um 14:41:05 Uhr
Goto Top
Wird denn der Pfad korrekt aufgelöst?
147323
147323 22.01.2021 aktualisiert um 17:13:26 Uhr
Goto Top
Ich sehe hier gleich mehrere Probleme mit dem obigen Code!
Uu aller erst machst du kein "Escaping" der Sonderzeichen in der Batch (dazu gehören beispielsweise die öffnenden und schließenden Klammern für das VBS etc.)
Zum anderen unterdrückst du im VBS-Code keinerlei evt. auftretenden Dialoge. Das sollte man mittels
appXLS.DisplayAlerts = False
einstellen, dann unterdrückst du eventuelle auftauchenden Dialoge und verhinderst damit auch solche Fehler wie du sie gerade siehst.
Ich denke dein Fehler liegt an so einem ausnahmsweise aufpoppenden Dialog. Das siehst du ganz schnell indem du mal Excel im Code sichtbar schaltest mit
appXLS.Visible = True
Zusätzlich natürlich wie @H41mSh1C0R sagt den Pfad doppelt und dreifach prüfen und auch ob dieser für Excel auch als vertrauenswürdig deklariert ist.

Probier also als erstes mal das hier um zu prüfen ob ein Dialog aufpoppt indem du Excel mal sichtbar schaltest
@echo off
>print.vbs (
ECHO Set appXLS = CreateObject^("Excel.Application"^)  
ECHO appXLS.Visible = True
ECHO Set wbkXLS = appXLS.Workbooks.Open^("%Pfad%%Name%%Typ%", , true^)  
ECHO wbkXLS.sheets^("Sheet_test"^).PrintOut  
ECHO wbkXLS.Close 0
ECHO appXLS.Quit
)
wscript //NOLOGO print.vbs
del print.vbs
und dann das Ganze anschließend mal mit globaler Unterdrückung von Dialogen
@echo off
>print.vbs (
ECHO Set appXLS = CreateObject^("Excel.Application"^)  
ECHO appXLS.DisplayAlerts = False
ECHO Set wbkXLS = appXLS.Workbooks.Open^("%Pfad%%Name%%Typ%", , true^)  
ECHO wbkXLS.sheets^("Sheet_test"^).PrintOut  
ECHO wbkXLS.Close 0
ECHO appXLS.DisplayAlerts = True
ECHO appXLS.Quit
)
wscript //NOLOGO print.vbs
del print.vbs


Gruß jokari
OKIDOKI
OKIDOKI 22.01.2021 um 17:28:48 Uhr
Goto Top
Je mehr ich probieren, umso mehr Probleme gibt es face-smile
Also erst einmal vielen Dank für eure Ansätze!

Nach dem Tipp von H41mSh1C0R habe ich den Pfad einfach auskommentiert, sprich "1.xlsx" geschrieben.
Dann kam der Fehler: Wir konnten '1.xlsx' nicht finden (obwohl beide im selben Verzeichnis liegen). Wurde das Objekt vielleicht verschoben, umbenannt oder gelöscht?

Und genauso ergeht es mir bei den Vorschlägen jokari, die Datei ist nicht auffindbar ...
147323
147323 22.01.2021 aktualisiert um 17:52:54 Uhr
Goto Top
sprich "1.xlsx" geschrieben.
Damit stellst du dir selbst ein Bein und ist eine potenzielle Fehlerquelle. Gib bitte den voll qualifizierten Pfad an!
OKIDOKI
OKIDOKI 22.01.2021 aktualisiert um 18:50:15 Uhr
Goto Top
... das hatte ich bisher auch so, nur zur Darstellung (und Überprüfung eurer Vorschläge) hatte ich das versucht face-smile

Mit Dateiauswahl sieht es bisher so aus:

setlocal
set "Name="  
:: Datei auswählen
 >msgbox.vbs ECHO 'Bypasses IE7+ c:\fakepath\file.txt problem  
>>msgbox.vbs ECHO Function BrowseForFile()
>>msgbox.vbs ECHO With CreateObject("WScript.Shell")  
>>msgbox.vbs ECHO Dim fso : Set fso = CreateObject("Scripting.FileSystemObject")  
>>msgbox.vbs ECHO Dim tempFolder : Set tempFolder = fso.GetSpecialFolder(2)
>>msgbox.vbs ECHO Dim tempName : tempName = fso.GetTempName() ^& ".hta"  
>>msgbox.vbs ECHO Dim path : path = "HKCU\Volatile Environment\MsgResp"  
>>msgbox.vbs ECHO With tempFolder.CreateTextFile(tempName)
>>msgbox.vbs ECHO .Write "<input type=file name=f>" ^& _  
>>msgbox.vbs ECHO "<script>f.click();(new ActiveXObject('WScript.Shell'))" ^& _  
>>msgbox.vbs ECHO ".RegWrite('HKCU\\Volatile Environment\\MsgResp', f.value);" ^& _  
>>msgbox.vbs ECHO "close();</script>"  
>>msgbox.vbs ECHO .Close
>>msgbox.vbs ECHO End With
>>msgbox.vbs ECHO .Run tempFolder ^& "\" ^& tempName, 1, True  
>>msgbox.vbs ECHO BrowseForFile = .RegRead(path)
>>msgbox.vbs ECHO .RegDelete path
>>msgbox.vbs ECHO End With
>>msgbox.vbs ECHO End Function
>>msgbox.vbs ECHO wscript.echo BrowseForFile
:: Auslesen der vbs-Variable in batch
for /f "delims=" %%i in ('cscript //nologo msgbox.vbs') do set "Pfad=%%~dpi" & set "Name=%%~ni" & set "Typ=%%~xi"  
:: Vollständiger Pfad und Dateiname: %Pfad%%Name%%Typ%
del msgbox.vbs
if not defined Name goto eof

 >print.vbs ECHO Set appXLS = CreateObject("Excel.Application")  
>>print.vbs ECHO Set wbkXLS = appXLS.Workbooks.Open("%Pfad%%Name%%Typ%", , true)  
>>print.vbs ECHO wbkXLS.sheets("Mitarbeiter").PrintOut  
>>print.vbs ECHO wbkXLS.Close 0
>>print.vbs ECHO Set wbkXLS = Nothing
>>print.vbs ECHO appXLS.Quit
>>print.vbs ECHO Set appXLS = Nothing
print.vbs
del print.vbs
147323
147323 22.01.2021 aktualisiert um 23:05:14 Uhr
Goto Top
Lies meine Kommentare und den Code nochmal ganz genau, Stichwort Escaping!!
OKIDOKI
OKIDOKI 23.01.2021 aktualisiert um 13:13:47 Uhr
Goto Top
Oben hatte ich falsch "gepastet" ...

Die richtige Excel-Datei wird gefunden (nicht zuletzt auch durch den den vorherigen Dialog).
Dann wird sie geöffnet und es erscheint noch ein Dialog der nachfragt, ob die Datei aktualisiert werden soll - ok.

Wenn dann die vbs anläuft kommt die Meldung: "Index außerhalb des gültigen Bereichs."

Auch nach Unterdrückung der Meldung in deinem unteren Beispiel - nach Unterdrückung von Dialogen - bleibt die Index-Meldung erhalten:

setlocal
set "Name="  
:: VBS Datei auswählen
 >msgbox.vbs ECHO 'Bypasses IE7+ c:\fakepath\file.txt problem  
>>msgbox.vbs ECHO Function BrowseForFile()
>>msgbox.vbs ECHO With CreateObject("WScript.Shell")  
>>msgbox.vbs ECHO Dim fso : Set fso = CreateObject("Scripting.FileSystemObject")  
>>msgbox.vbs ECHO Dim tempFolder : Set tempFolder = fso.GetSpecialFolder(2)
>>msgbox.vbs ECHO Dim tempName : tempName = fso.GetTempName() ^& ".hta"  
>>msgbox.vbs ECHO Dim path : path = "HKCU\Volatile Environment\MsgResp"  
>>msgbox.vbs ECHO With tempFolder.CreateTextFile(tempName)
>>msgbox.vbs ECHO .Write "<input type=file name=f>" ^& _  
>>msgbox.vbs ECHO "<script>f.click();(new ActiveXObject('WScript.Shell'))" ^& _  
>>msgbox.vbs ECHO ".RegWrite('HKCU\\Volatile Environment\\MsgResp', f.value);" ^& _  
>>msgbox.vbs ECHO "close();</script>"  
>>msgbox.vbs ECHO .Close
>>msgbox.vbs ECHO End With
>>msgbox.vbs ECHO .Run tempFolder ^& "\" ^& tempName, 1, True  
>>msgbox.vbs ECHO BrowseForFile = .RegRead(path)
>>msgbox.vbs ECHO .RegDelete path
>>msgbox.vbs ECHO End With
>>msgbox.vbs ECHO End Function
>>msgbox.vbs ECHO wscript.echo BrowseForFile
:: Auslesen der vbs-Variable in batch
for /f "delims=" %%i in ('cscript //nologo msgbox.vbs') do set "Pfad=%%~dpi" & set "Name=%%~ni" & set "Typ=%%~xi"  
::echo "%Name%" mit Typ "%Typ%" in Pfad "%Pfad%" ergibt: "%Pfad%%Name%%Typ%  
del msgbox.vbs

@echo off
>print.vbs (
ECHO Set appXLS = CreateObject^("Excel.Application"^)  
ECHO appXLS.DisplayAlerts = False
ECHO Set wbkXLS = appXLS.Workbooks.Open^("%Pfad%%Name%%Typ%", , true^)  
ECHO wbkXLS.sheets^("Sheet_Name"^).Visible = True  
ECHO wbkXLS.sheets^("Sheet_Name"^).PrintOut  
ECHO wbkXLS.Close 0
ECHO appXLS.DisplayAlerts = True
ECHO appXLS.Quit
)
wscript //NOLOGO print.vbs
del print.vbs
OKIDOKI
OKIDOKI 23.01.2021 aktualisiert um 13:15:10 Uhr
Goto Top
Hallo jokari,

ich denke ich bin dem Problem auf der Spur!
Ein Fehler war die nicht übereinstimmende Bezeichnung der Tabellenblätter!

Das habe ich nun überprüft und entsprechend geändert! (Zeile 34)
- Der Ausdruck funktioniert, wenn der Reiter eingeblendet und beschriftet ist mit einer bestimmten Zeichenlänge und vermutlich ohne Leerzeichen.

Wie lässt sich der Ausdruck realisieren, wenn das Tabellenblatt ausgeblendet ist?
Das Tabellenblatt muss vorher eingeblendet werden: Einfügen:
ECHO wbkXLS.sheets^("Sheet_Name"^).Visible = True  
habe ich oben ebenfalls eingefügt

Nun hakt es eigentlich nur noch ein einer Stelle:
Kann das Tabellenblatt eine beliebige Zeichenfolge enthalten / oder wie ist das begrenzt?

Hast du dazu eine Idee?
TK1987
TK1987 27.01.2021 aktualisiert um 16:24:56 Uhr
Goto Top
Moin,

lass am besten dass Batch+Vbs gemurkse und nimm stattdessen Powershell
$Quelle = 'C:\Test\Mappe.xlsx'  
$Blatt  = 'Sheet_test'  

####################################################

$Excel  = New-Object -Com Excel.Application
$Excel.DisplayAlerts = $false
try {
  $Book  = $Excel.Workbooks.open($Quelle,0,$true)
  $Sheet = $Book.Worksheets | ? Name -eq $Blatt
  if (!$Sheet) {throw "Kein Blatt mit Namen '$Blatt' gefunden. "}  
  $Sheet.PrintOut()
  $Book.Close()
  }
catch   {write-host -f red $_.Exception.Message}
finally { do { $i = [System.Runtime.InteropServices.Marshal]::ReleaseComobject($Excel) } while ($i -gt 0) }

Gruß Thomas
OKIDOKI
OKIDOKI 27.01.2021 um 16:27:47 Uhr
Goto Top
Lieber Thomas,
ich freue mich, dass es weitergeht face-smile.

Mein Problem ist, dass ich den Ausdruck aus einer laufenden Batch realisieren muss, da diese noch andere Prozesse steuert. Es wäre also notwendig, den Powershell-Schnipsel daraus zu starten, ist das möglich?
Es ist mir vollkommen klar, dass Batch quasi tot ist, allerdings müsste dann die gesamte Batch auf Powershell umgeschrieben werden, was mir leider (dank meiner fehlenden Kenntnisse) nicht möglich ist.

Dennoch würde ich gerne deinen Vorschlag realisieren ... bloß wie?

Unabhängig von meinen Ausführungen habe ich deinen Vorschlag direkt mit Powershell versucht durchlaufen zu lassen.
Bei mir kommt folgende Fehlermeldung:
"Die PrintOut-Eigenschaft des Worksheet-Objektes kann nicht zugeordnet werden."

Heißt ja, dass er die Datei zumindest gefunden hat, aber eben trotzdem nicht ausdrucken kann.
Beim Tabellenblatt handelt es sich um die Beschriftung "Pädagogische Mitarbeiter". Bei Umbenennung in "Druck" funktioniert es es aber auch nicht. Merkwürdigerweise geht das "Batch+Vbs gemurkse" zumindest, wenn das Tabellenblatt in "Druck" umbenannt ist und sogar ausgeblendet wurde.

Oh Mann, und nun?
Liebe Grüße
okidoki
TK1987
TK1987 27.01.2021 aktualisiert um 19:05:05 Uhr
Goto Top
Zitat von @OKIDOKI:
Mein Problem ist, dass ich den Ausdruck aus einer laufenden Batch realisieren muss, da diese noch andere Prozesse steuert. Es wäre also notwendig, den Powershell-Schnipsel daraus zu starten, ist das möglich?
Möglich, klar - Sinvoll, mal dahingestellt. Powershell-Script mit Batch starten geht so:
powershell -EP ByPass -file "C:\Pfad\Zum\PowershellScript.ps1"  
Es ist mir vollkommen klar, dass Batch quasi tot ist, allerdings müsste dann die gesamte Batch auf Powershell umgeschrieben werden, was mir leider (dank meiner fehlenden Kenntnisse) nicht möglich ist.
dabei können wir ja behilflich sein, wenn du mal dein ganzes Script postest oder kurz beschreibst, was dein Script tut.

Aber erst mal eins nach dem anderen
Bei mir kommt folgende Fehlermeldung:
"Die PrintOut-Eigenschaft des Worksheet-Objektes kann nicht zugeordnet werden."
Ok, das heisst schon mal, alles außer dem Druckbefehl hat soweit funktioniert. Hast du vielleicht keinen Standarddrucker festgelegt?

Versuchen wir es mal anders:
$Quelle = 'C:\Test\Mappe.xlsx'  
$Blatt  = 'Pädagogische Mitarbeiter'  

####################################################

$Excel  = New-Object -Com Excel.Application
$Excel.DisplayAlerts = $false
try {
  $Book  = $Excel.Workbooks.open($Quelle,0,$true)
  $Sheet = $Book.Worksheets | ? Name -eq $Blatt
  if (!$Sheet) {throw "Kein Blatt mit Namen '$Blatt' gefunden. "}  
  $Pages = $Sheet.PageSetup.Pages.Count
  if (!$Pages) {throw "Kein Druckbarer Bereich auf Blatt '$Blatt'. "}  
  $Sheet.PrintOut(1,$Pages,1,$false,"Microsoft Print to PDF")  
  $Book.Close()
  }
catch   {write-host -f red $_.Exception.Message}
finally { do { $i = [System.Runtime.InteropServices.Marshal]::ReleaseComobject($Excel) } while ($i -gt 0) }

Zum einen habe ich noch eine Ausnahmebehandlung hinzugefügt, falls das zu druckende Blatt keinen Druckbereich hat, zum anderen habe ich den Drucker erstmal manuell auf "Microsoft Print to PDF" festgelegt.

Tut sich nun etwas?
OKIDOKI
OKIDOKI 27.01.2021 aktualisiert um 21:24:54 Uhr
Goto Top
Du bist echt klasse face-smile

ok, wenn kein Druckbereich festgelegt ist kommt folgende Fehlermeldung:
Kein Druckbarer Bereich auf Blatt 'Pädagogische Mitarbeiter'.

Dann habe ich einen Druckbereich festgelegt und er geht in den Explorer, um ein pdf abzuspeichern - insofern scheint es in dieser Richtung zu klappen, einen Standarddrucker habe ich aber festgelegt.

Dein Vorschlag, den gesamten in Powershell aufzupeppen finde ich natürlich klasse, da mir das ganze Projekt sehr am Herzen liegt!
Insofern folge ich deinem Rat und stelle hier meinen Code (ist mir etwas peinlich, weil Freaks sicher sofort .... Schwachstellen finden)

Ich freue mich natürlich über Hilfe, wobei es vermutlich vielen anderen helfen kann, da ich viele Ansätze gerade aus diesem Forum habe face-smile

Besondere Probleme machen mir die Fenster, Meldungen und Wartebalken, da greife ich komplett auf Batch zurück, was natürlich semi ist - ist mir aber bewusst und funktioniert face-smile

Ein Hinweis: Ein Downloader gibt die Passörter und Pfade frei, damit diese nicht im "Hauptprogramm" gespeichert werden!
Nun bin ich gespannt ...

Zunächst der "Downloader:
set "s-sv=xxx"  
set "s-us=yxyx"  
set "s-pw=qwer"  
start Wbusy "" "Startet, bitte warten ..."  /marquee  
powershell.exe -EP ByPass -Command "$client = new-object System.Net.WebClient; $client.Credentials = New-Object System.Net.NetworkCredential '%s-us%','%s-pw%';$client.DownloadFile('ftp://%s-us%@%s-sv%/update/Labor/labor.cab','labor.cab')"  
expand.exe labor.cab -F:labor.bat .\
expand.exe labor.cab -F:2-prev_VT-Plan.csv .\
expand.exe labor.cab -F:2-prev.xlsx .\
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: timestamp setzen für log
for /f %%a in ('powershell -Command "Get-Date -format yyyy-MM-dd_HH-mm-ss"') do set timestamp=%%a  
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: log-Datei
if not exist .\log md .\log
:: last log-file ermitteln
set log-neu=
for /f %%i in ('dir /b /od "log\*.txt"') do set "log-neu=%%i"  
:: starten und BEIDES (Stdout+Stderr in eine Datei loggen)
labor.bat >.\log\%timestamp%_log.txt 2>&1
exit

Dann das Hauptprogramm.
Vielleicht kurz zur Erklärung:
Hauptbestandteil ist ein Excel-File, dass heruntergeladen wird. Darin werden die Berechnungen ausgeführt.
Von einem Blatt werden die entstandenen Daten ausgelesen, in HTML (noch in Excel) umgewandelt und hochladen.
Durch das Auslesen sollen auch bestimmte Excel Sheets, wie Pädagogische Mitarbeiter, automatisch ausgedruckt werden.

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
set version=v11.01.24
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: timestamp erzeugen / erneut bei Sprungmarken
for /f %%a in ('powershell -Command "Get-Date -format yy:MM:dd"') do set daystamp=%%a  
for /f %%a in ('powershell -Command "Get-Date -format dd.MM.yyyy"') do set today=%%a  
for /f %%a in ('powershell -Command "Get-Date -format yyyy"') do set YYYY=%%a  
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
set "header=Vertretung  
:: Release Date    : 2021-01-24
:: Editor          : N.N.
:: v1.0.2010 - The first release
:: Release Date    : 2010-10-25
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::::::::::::::::::::::::::   CONFIG   ::::::::::::::::::::::::::::::::::::::::::
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: Don't touch anything below this point unless you know what your doing. ::::::  
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: Ansprache
ping /n 3 localhost >nul
set "now=%time: =0%"  
set "flag=0"  
if "%now:~,8%" geq "04:00:00" if "%now:~,8%" lss "07:59:59" set "flag=Moin, moin!"  
if "%now:~,8%" geq "08:00:00" if "%now:~,8%" lss "11:59:59" set "flag=Guten Morgen!"  
if "%now:~,8%" geq "12:00:00" if "%now:~,8%" lss "12:59:59" set "flag=Guten Appetit!"  
if "%now:~,8%" geq "13:00:00" if "%now:~,8%" lss "14:59:59" set "flag=Guten Tag!"  
if "%now:~,8%" geq "15:00:00" if "%now:~,8%" lss "15:59:59" set "flag=Tea Time!"  
if "%now:~,8%" geq "16:00:00" if "%now:~,8%" lss "17:59:59" set "flag=After Tea!"  
if "%now:~,8%" geq "18:00:00" if "%now:~,8%" lss "19:59:59" set "flag=Guten Abend!"  
if "%now:~,8%" geq "20:00:00" if "%now:~,8%" lss "22:59:59" set "flag=After Eigth!"  
if "%now:~,8%" geq "23:00:00" if "%now:~,8%" lss "23:59:59" set "flag=Work-Life-Balance beachten!"  
if "%now:~,8%" geq "00:00:00" if "%now:~,8%" lss "03:59:59" set "flag=Work-Life-Balance gefährdet!"  
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: Day-INFO-Flags: Anzeige in einem bestimmten Zeitraum
set "dsflag="  
if "%daystamp:~,8%" geq "21:01:25" if "%daystamp:~,8%" lss "21:01:26" set "dsflag=[ i ] Fixed Wochabschluss"  
if "%daystamp:~,8%" geq "20:01:26" if "%daystamp:~,8%" lss "20:01:27" set "dsflag=[ i ] Wochenabschluss neu aufgesetzt"  
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: News-Bereich
set "news="  
:: FTP Down- oder Upload
powershell.exe -EP ByPass -Command "$client = new-object System.Net.WebClient; $client.Credentials = New-Object System.Net.NetworkCredential '%s-us%','%s-pw%';$client.DownloadFile('ftp://xxx.com/update/Labor/news.txt','news.txt')"  
set /p news=<news.txt
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: Update TIMEIT-Downloader
:: FTP Down- oder Upload
powershell.exe -EP ByPass -Command "$client = new-object System.Net.WebClient; $client.Credentials = New-Object System.Net.NetworkCredential '%s-us%','%s-pw%';$client.DownloadFile('ftp://xxx.com/update/Labor/down.bat','down.bat')"  
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: maxsafe / Anzahl der Sicherheitskopien
set /a Anzahl=30
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
setlocal
:: Variablen setzen / Sicherungen anhand maxsav überprüfen und löschen
set "teach=daten"  
set "pae=daten\pae"  
set "sicher=sicherungen"  
set "log=log"  
for /f "skip=%Anzahl% delims=" %%i in ('dir /b /a-d /o-d %teach%') do del "%teach%\%%i"  
for /f "skip=%Anzahl% delims=" %%i in ('dir /b /a-d /o-d %pae%') do del "%pae%\%%i"  
for /f "skip=%Anzahl% delims=" %%i in ('dir /b /a-d /o-d %sicher%') do del "%sicher%\%%i"  
for /f "skip=%Anzahl% delims=" %%i in ('dir /b /a-d /o-d %log%') do del "%log%\%%i"  
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
setlocal
:: Cab-Routine
:: Passwortschutz: -pKuhlief951 (p) für Passwort setzen
 >"container.ddf" echo .Option Explicit  
>>"container.ddf" echo .Set CabinetNameTemplate=vt-plan.cab  
>>"container.ddf" echo .Set CompressionType=MSZIP  
>>"container.ddf" echo .Set UniqueFiles="OFF"  
>>"container.ddf" echo .Set MaxDiskSize=0  
>>"container.ddf" echo "1.xlsx"  
>>"container.ddf" echo "2.xlsx"  
:: makecab.exe /f container.ddf
:: Bereinigen
:: erase /Q setup.inf 
:: erase /Q setup.rpt
:: erase /Q container.ddf
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: Berichtigung Kalenderwoche, erlaubt: +x oder -y
set kw-ber=-1
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: Kalenderwoche ermitteln
set G=%temp%\GetWeek.vbs
>%G% echo WScript.Echo Datepart("ww",WScript.Arguments(0),2)  
for /f %%i in ('cscript //nologo %G% %date%') do set KalWo=%%i  
set /A kw=%KalWo%%kw-ber%
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: Wochentag ermitteln
set /a count=0
FOR /F "skip=1" %%D IN ('wmic path win32_localtime get dayofweek') DO (  
    set dow=%%D
    if %%D==0 set dowday=So
    if %%D==1 set dowday=Mo
    if %%D==2 set dowday=Di
    if %%D==3 set dowday=Mi
    if %%D==4 set dowday=Do
    if %%D==5 set dowday=Fr
    if %%D==6 set dowday=Sa
    set /a count+=1
    goto :next
)
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:::::::::::::::::::::::::::  END CONFIG  :::::::::::::::::::::::::::::::::::::::
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:::::::::::::::::::::::::::  SPRUNGMARKE  ::::::::::::::::::::::::::::::::::::::
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:next
del labor.cab
:: log-file (eingangs in down.bat) als Variable ohne 8 zeichen '_log.txt'  
set "prozess=LOGIN : %log-neu:~0,-8% Uhr : last call"   
Wbusy "TIMEIT" "" /Stop  
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:::::::::::::::::::::::::::  PROGRAMMSTART  ::::::::::::::::::::::::::::::::::::
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:timeit
:: timestamp erzeugen BEGINN
for /f %%a in ('powershell -Command "Get-Date -format HH:mm"') do set tohour=%%a  
:: timestamp erzeugen ENDE
if exist 1.xlsx (set "ver= - - - O F F L I N E - - -  ") else (set "ver=")  
if exist 1.xlsx (set "onl=3   Wochen > Online") else (set "onl=")  
if exist 1.xlsx (set "reinigen=4   Wochen > Entfernen") else (set "reinigen=")  
 >msgbox.vbs echo WScript.Echo InputBox("%dowday%. %today%  :  KW %kw%" ^& vbCrLf ^& _  
>>msgbox.vbs echo    "" ^& vbCrLf ^& _  
>>msgbox.vbs echo    "%tohour% Uhr : %flag%" ^& vbCrLf ^& _  
>>msgbox.vbs echo    "" ^& vbCrLf ^& _  
>>msgbox.vbs echo    " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - " ^& vbCrLf ^& _  
>>msgbox.vbs echo    "" ^& vbCrLf ^& _  
>>msgbox.vbs echo    "VERTRETUNGSPLAN  :  GS" ^& vbCrLf ^& _  
>>msgbox.vbs echo    "" ^& vbCrLf ^& _  
>>msgbox.vbs echo    "" ^& vbCrLf ^& _  
>>msgbox.vbs echo    "" ^& vbCrLf ^& _  
>>msgbox.vbs echo    "1  %ver% Woche" ^& vbCrLf ^& _  
>>msgbox.vbs echo    "" ^& vbCrLf ^& _  
>>msgbox.vbs echo    "2  %ver% Woche" ^& vbCrLf ^& _  
>>msgbox.vbs echo    "" ^& vbCrLf ^& _  
>>msgbox.vbs echo    "%onl%" ^& vbCrLf ^& _  
>>msgbox.vbs echo    "" ^& vbCrLf ^& _  
>>msgbox.vbs echo    "%reinigen%" ^& vbCrLf ^& _  
>>msgbox.vbs echo    "" ^& vbCrLf ^& _  
>>msgbox.vbs echo    "" ^& vbCrLf ^& _  
>>msgbox.vbs echo    "" ^& vbCrLf ^& _  
>>msgbox.vbs echo    "" ^& vbCrLf ^& _  
>>msgbox.vbs echo    "" ^& vbCrLf ^& _  
>>msgbox.vbs echo    "" ^& vbCrLf ^& _  
>>msgbox.vbs echo    "" ^& vbCrLf ^& _  
>>msgbox.vbs echo    "" ^& vbCrLf ^& _  
>>msgbox.vbs echo    " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - " ^& vbCrLf ^& _  
>>msgbox.vbs echo    "" ^& vbCrLf ^& _  
>>msgbox.vbs echo    "%prozess%" ^& vbCrLf ^& _  
>>msgbox.vbs echo    "" ^& vbCrLf ^& _  
>>msgbox.vbs echo    "%dsflag%" ^& vbCrLf ^& _  
>>msgbox.vbs echo    "" ^& vbCrLf ^& _  
>>msgbox.vbs echo    "%news%" ^& vbCrLf ^& _  
>>msgbox.vbs echo    "" ^& vbCrLf ^& _  
>>msgbox.vbs echo "",  _  
>>msgbox.vbs echo "%header%", _  
>>msgbox.vbs echo "Optionen")  
set "all-a="  
for /f "delims=" %%i in ('cscript //nologo msgbox.vbs') do set "all-a=%%i"  
erase /Q msgbox.vbs
if not defined all-a (goto :menu-exit) else (goto :menu-fin)
:menu-exit
erase /Q labor.bat 2-prev.xlsx 2-prev_VT-Plan.csv news.txt
exit
:menu-fin
:: Überprüfung, ob Eingaben richtig sind, anonsten Ausstieg
if %all-a% LSS 1 goto :timeit
if %all-a%==1 goto :laufende
if %all-a%==2 goto :kommende
if %all-a%==3 goto :online
if %all-a%==4 goto :reinigung
if %all-a%==news goto :news
if %all-a%==Optionen goto :mehr
if %all-a% GTR 4 goto :timeit
goto :timeit
exit
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:::::::::::::::::::::::::::  SPRUNGMARKE  ::::::::::::::::::::::::::::::::::::::
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:mehr
:: aktuellen log-file ermitteln
set log-neu=
for /f %%i in ('dir /b /od "log\*.txt"') do set "log-neu=%%i"  
set "prozess="  
if not exist 1.xlsx (set "prozessm=[ i ] Wochen downloaden > Optionen") else (set "prozessm=")  
if exist 1.xlsx (set "prev=4  Woche > Abschluss <> Preview") else (set "prev=")  
if exist 1.xlsx (set "wechsel=5  Woche > Archiv > Neu") else (set "wechsel=")  
if exist 1.xlsx (set "aufs=6  Plan > Supervision") else (set "aufs=")  
 >msgbox.vbs echo WScript.Echo InputBox("" ^& vbCrLf ^& _  
>>msgbox.vbs echo    "" ^& vbCrLf ^& _  
>>msgbox.vbs echo    "1  Konto > Lehrer" ^& vbCrLf ^& _  
>>msgbox.vbs echo    "" ^& vbCrLf ^& _  
>>msgbox.vbs echo    "2  Konto > PMA" ^& vbCrLf ^& _  
>>msgbox.vbs echo    "" ^& vbCrLf ^& _  
>>msgbox.vbs echo    "3  Woche > Sicherungen" ^& vbCrLf ^& _  
>>msgbox.vbs echo    "" ^& vbCrLf ^& _  
>>msgbox.vbs echo    "%prev%" ^& vbCrLf ^& _  
>>msgbox.vbs echo    "" ^& vbCrLf ^& _  
>>msgbox.vbs echo    "%wechsel%" ^& vbCrLf ^& _  
>>msgbox.vbs echo    "" ^& vbCrLf ^& _  
>>msgbox.vbs echo    "%aufs%" ^& vbCrLf ^& _  
>>msgbox.vbs echo    "" ^& vbCrLf ^& _  
>>msgbox.vbs echo    "7  Drucker > Standard" ^& vbCrLf ^& _  
>>msgbox.vbs echo    "" ^& vbCrLf ^& _  
>>msgbox.vbs echo    "8  Ethernet > Check" ^& vbCrLf ^& _  
>>msgbox.vbs echo    "" ^& vbCrLf ^& _  
>>msgbox.vbs echo    "" ^& vbCrLf ^& _  
>>msgbox.vbs echo    "" ^& vbCrLf ^& _  
>>msgbox.vbs echo    "" ^& vbCrLf ^& _  
>>msgbox.vbs echo    "" ^& vbCrLf ^& _  
>>msgbox.vbs echo    "" ^& vbCrLf ^& _  
>>msgbox.vbs echo    " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - " ^& vbCrLf ^& _  
>>msgbox.vbs echo    "TIMEIT %version% : Treiber v%downld%" ^& vbCrLf ^& _  
>>msgbox.vbs echo    "Logfile : %log-neu%" ^& vbCrLf ^& _  
>>msgbox.vbs echo    "N.N. © 2009 - %YYYY%" ^& vbCrLf ^& _  
>>msgbox.vbs echo    " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - " ^& vbCrLf ^& _  
>>msgbox.vbs echo    "" ^& vbCrLf ^& _  
>>msgbox.vbs echo    "" ^& vbCrLf ^& _  
>>msgbox.vbs echo    "%prozessm%" ^& vbCrLf ^& _  
>>msgbox.vbs echo    "" ^& vbCrLf ^& _  
>>msgbox.vbs echo    "" ^& vbCrLf ^& _  
>>msgbox.vbs echo "",  _  
>>msgbox.vbs echo "OPTIONEN / maxsav= %Anzahl%", _  
>>msgbox.vbs echo "zurück")  
set "all-a="  
for /f "delims=" %%i in ('cscript //nologo msgbox.vbs') do set "all-a=%%i"  
erase /Q msgbox.vbs
if not defined all-a goto :timeit
:: Überprüfung, ob Eingaben richtig sind, anonsten Ausstieg
if %all-a% LSS 1 goto :timeit
if %all-a%==1 goto :lehrer-konto
if %all-a%==2 goto :pae-konto
if %all-a%==3 goto :sicherungen
if %all-a%==4 goto :preview-ausw
if %all-a%==5 goto :archivieren
if %all-a%==6 goto :aufsichten
if %all-a%==7 goto :drucker
if %all-a%==8 goto :ethernet
if %all-a%==zurück goto :timeit
if %all-a% GTR 9 goto :timeit
goto :timeit
exit
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:::::::::::::::::::::::::::  SPRUNGMARKE  ::::::::::::::::::::::::::::::::::::::
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:laufende
if not exist 1.xlsx (goto :donwnload-kw) else (start /wait 1.xlsx)
set "prozess=[ i ] Woche aktualisiert!"  
goto :timeit
exit
:donwnload-kw
start Wbusy "TIMEIT" "Datensendung, bitte warten ..."  /marquee  
:: FTP Down- oder Upload
powershell.exe -EP ByPass -Command "$client = new-object System.Net.WebClient; $client.Credentials = New-Object System.Net.NetworkCredential '%s-us%','%s-pw%';$client.DownloadFile('ftp://xxx.com/vt-plan.cab','vt-plan.cab')"  
:: Cab-Erzeugung eingangs
expand.exe vt-plan.cab -F:1.xlsx .\
expand.exe vt-plan.cab -F:2.xlsx .\
erase /Q vt-plan.cab
set "prozess=[ i ] Datensendung abgeschlossen!"  
Wbusy "TIMEIT" "" /Stop  
start /wait 1.xlsx
goto :timeit
exit
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:::::::::::::::::::::::::::  SPRUNGMARKE  ::::::::::::::::::::::::::::::::::::::
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:kommende
if not exist 2.xlsx (goto :donwnload-kw) else (start /wait 2.xlsx)
set "prozess=[ i ] Woche aktualisiert!"  
goto :timeit
exit
:donwnload-kw
start Wbusy "TIMEIT" "Datensendung, bitte warten ..."  /marquee  
:: FTP Down- oder Upload
powershell.exe -EP ByPass -Command "$client = new-object System.Net.WebClient; $client.Credentials = New-Object System.Net.NetworkCredential '%s-us%','%s-pw%';$client.DownloadFile('ftp://xxx.com/vt-plan.cab','vt-plan.cab')"  
:: Cab-Erzeugung eingangs
expand.exe vt-plan.cab -F:1.xlsx .\
expand.exe vt-plan.cab -F:2.xlsx .\
erase /Q vt-plan.cab
set "prozess=[ i ] Datensendung abgeschlossen!"  
Wbusy "TIMEIT" "" /Stop  
start /wait 2.xlsx
goto :timeit
exit
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:::::::::::::::::::::::::::  SPRUNGMARKE  ::::::::::::::::::::::::::::::::::::::
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:online
:: timestamp erzeugen BEGINN
for /f %%a in ('powershell -Command "Get-Date -format yyyy-MM-dd_HH-mm-ss"') do set timestamp=%%a  
:: timestamp erzeugen ENDE
if not exist 1.xlsx set "prozess=[ i ] Wochen fehlen!"  
if not exist 1.xlsx goto :timeit 
start Wbusy "TIMEIT" "Datensendung, bitte warten ..."  /marquee  
:: Cab-Erzeugung eingangs
makecab.exe /f container.ddf
move "disk1\*.*" ".\vt-plan.cab"  
rmdir disk1 /S /Q 

:: convert-Datei erstellen zum Ändern der Kommas in Semikolons (im Vergleich zur reinen vbs: & wurden durch ^& ersetzt (maskiert)
 >convert.vbs echo Set XL = CreateObject("Excel.Application")  
>>convert.vbs echo Set fso = CreateObject("Scripting.FileSystemObject")  
>>convert.vbs echo Set wss = CreateObject("WScript.Shell")  
>>convert.vbs echo OrdnerEin = wss.currentdirectory
>>convert.vbs echo For Each Datei In fso.GetFolder(OrdnerEin).Files

:: If LCase(fso.GetExtensionName(Datei.Name)) = "xlsx" Then  
>>convert.vbs echo If lcase(Datei.name) = "1.xlsx" or lcase(Datei.name) = "2.xlsx" then  
>>convert.vbs echo XL.Workbooks.Open Datei.Path
>>convert.vbs echo For Each Wsheet In XL.ActiveWorkbook.Worksheets
>>convert.vbs echo if fso.FileExists (OrdnerEin ^& "\" ^& fso.GetBaseName(Datei.Name) ^& "_" ^& Wsheet.Name ^& ".csv") Then  
>>convert.vbs echo fso.DeleteFile(OrdnerEin ^& "\" ^& fso.GetBaseName(Datei.Name) ^& "_" ^& Wsheet.Name ^& ".csv")  
>>convert.vbs echo end if
>>convert.vbs echo if wsheet.name ="VT-Plan" then  
>>convert.vbs echo Wsheet.SaveAs OrdnerEin ^& "\" ^& fso.GetBaseName(Datei.Name) ^& "_" ^& Wsheet.Name ^& ".csv",6 , , , , False  
>>convert.vbs echo End if
>>convert.vbs echo Next
>>convert.vbs echo XL.ActiveWorkbook.Close False
>>convert.vbs echo End If
>>convert.vbs echo Next
>>convert.vbs echo XL.Quit
>>convert.vbs echo Set XL = Nothing
>>convert.vbs echo Set wss = Nothing

:: ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
>>convert.vbs echo Datei = "vt-plan.csv"  
>>convert.vbs echo Datei1 = "1_vt-plan.csv"  
>>convert.vbs echo Datei2 = "2_vt-plan.csv"  

:: Hier musst du deinen Header setzen / VBCrLf bedeutet Leerzeile einfügen
>>convert.vbs echo Header = "Heute | <font id=*ur* size=*2* face=*Arial * color=#FFFFFF></font>;KL;STD;VTR;+;INFO;> > >;-;BMK"  
:: 1_VT-Plan.csv öfnen, komplett einlesen, leere Zeilen (noch mit Kommas!) entfernen
>>convert.vbs echo set d1 = fso.OpenTextFile(Datei1)
>>convert.vbs echo T = d1.ReadAll
>>convert.vbs echo T = Replace(T, ",,,,,,,," ^& VBCrLf, "")  

:: VT-Plan.csv erstellen, Header schreiben, Bei 1_Vt-Plan.csv Kommas in Semikolons ändern und in Datei schreiben
>>convert.vbs echo set d = fso.CreateTextFile(Datei)
>>convert.vbs echo d.WriteLine Replace(Header, "*", chr(34))  
>>convert.vbs echo d.Write Replace(T, ",", ";")  

:: 1_VT-Plan.csv schliessen
>>convert.vbs echo d1.close

:: 2_VT-Plan.csv öfnen, komplett einlesen, leere Zeilen (noch mit Kommas!) entfernen, Kommas in Semikolons ändern und in VT-Plan schreiben
>>convert.vbs echo set d2 = fso.OpenTextFile(Datei2)
>>convert.vbs echo T = d2.ReadAll
>>convert.vbs echo T = Replace(T, ",,,,,,,," ^& VBCrLf, "")  
>>convert.vbs echo d.Write Replace(T, ",", ";")  

:: 2_vt-plan und vt-plan schliessen
>>convert.vbs echo d.close
>>convert.vbs echo d2.close

:: 1_vt-plan.csv und 2_vt-plan löschen
>>convert.vbs echo If FSO.FileExists(Datei1) then
>>convert.vbs echo Set d = fso.GetFile(Datei1)
>>convert.vbs echo d.Delete
>>convert.vbs echo End If
>>convert.vbs echo If FSO.FileExists(Datei2) then
>>convert.vbs echo Set d = fso.GetFile(Datei2)
>>convert.vbs echo d.Delete
>>convert.vbs echo End If
>>convert.vbs echo Set fso = Nothing
:: convert-Datei Erstellung erfolgt, durchführen, dann wieder löschen
convert.vbs
erase /Q convert.vbs

:copy_online
:: FTP Down- oder Upload
powershell.exe -EP ByPass -Command "$client = new-object System.Net.WebClient; $client.Credentials = New-Object System.Net.NetworkCredential '%s-us%','%s-pw%';$client.UploadFile('ftp://xxx.com/vt-plan.cab','vt-plan.cab');$client.UploadFile('ftp://xxx.com/vt-plan.csv','vt-plan.csv')"  

:: Sicherung anlegen
move "vt-plan.cab" ".\%sicher%"  
ren ".\%sicher%\vt-plan.cab" "%timestamp%_online.cab"  

:: vt-plan und weitere nichtgebrauchte Dateien löschen
erase /Q vt-plan.csv 1.xlsx 2.xlsx
set "prozess=[ i ] Datensendung abgeschlossen!"  
Wbusy "TIMEIT" "" /Stop  
goto :timeit
exit
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:::::::::::::::::::::::::::  SPRUNGMARKE  ::::::::::::::::::::::::::::::::::::::
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:preview-ausw
setlocal
set "Name="  
:: VBS Datei auswählen
 >msgbox.vbs ECHO 'Bypasses IE7+ c:\fakepath\file.txt problem  
>>msgbox.vbs ECHO Function BrowseForFile()
>>msgbox.vbs ECHO With CreateObject("WScript.Shell")  
>>msgbox.vbs ECHO Dim fso : Set fso = CreateObject("Scripting.FileSystemObject")  
>>msgbox.vbs ECHO Dim tempFolder : Set tempFolder = fso.GetSpecialFolder(2)
>>msgbox.vbs ECHO Dim tempName : tempName = fso.GetTempName() ^& ".hta"  
>>msgbox.vbs ECHO Dim path : path = "HKCU\Volatile Environment\MsgResp"  
>>msgbox.vbs ECHO With tempFolder.CreateTextFile(tempName)
>>msgbox.vbs ECHO .Write "<input type=file name=f>" ^& _  
>>msgbox.vbs ECHO "<script>f.click();(new ActiveXObject('WScript.Shell'))" ^& _  
>>msgbox.vbs ECHO ".RegWrite('HKCU\\Volatile Environment\\MsgResp', f.value);" ^& _  
>>msgbox.vbs ECHO "close();</script>"  
>>msgbox.vbs ECHO .Close
>>msgbox.vbs ECHO End With
>>msgbox.vbs ECHO .Run tempFolder ^& "\" ^& tempName, 1, True  
>>msgbox.vbs ECHO BrowseForFile = .RegRead(path)
>>msgbox.vbs ECHO .RegDelete path
>>msgbox.vbs ECHO End With
>>msgbox.vbs ECHO End Function
>>msgbox.vbs ECHO wscript.echo BrowseForFile
:: Auslesen der vbs-Variable in batch
for /f "delims=" %%i in ('cscript //nologo msgbox.vbs') do set "Pfad=%%~dpi" & set "Name=%%~ni" & set "Typ=%%~xi"  
::echo "%Name%" mit Typ "%Typ%" in Pfad "%Pfad%" ergibt: "%Pfad%%Name%%Typ%  
del msgbox.vbs
:: Wenn Varible definiert ist, dann weiter, ansonsten Abbruch
if not defined Name goto :timeit

:ausw_1
 >msgbox.vbs ECHO x = MsgBox("Drucken PM-Wochenübersicht?" ^& vbCrLf ^& _  
>>msgbox.vbs ECHO    "",  _  
>>msgbox.vbs ECHO    4 + 32 + 0, _
>>msgbox.vbs ECHO    "TIMEIT")  
>>msgbox.vbs ECHO WScript.Quit(x)
:: vbs aufrufen:
msgbox.vbs
:: Errorlevel für spätere Verarbeitung in Variable sichern:
SET /A "Returncode=%errorlevel%"  
:: vbs löschen:
DEL msgbox.vbs
:: mach irgendwas mit der Variable:
:: Rueckgabewert der vbs-Datei: %Returncode%
:: Returncode 1=OK, 2=Abbrechen
IF %Returncode%==7 GOTO :sheet_o_prn
IF %Returncode%==6 GOTO :sheet_prn

:sheet_prn
start Wbusy "TIMEIT" "Datensendung, bitte warten ..."  /marquee  
:: ausgewähltes Excel-Sheet drucken
>print.vbs (
ECHO Set appXLS = CreateObject^("Excel.Application"^)  
ECHO appXLS.DisplayAlerts = False
ECHO Set wbkXLS = appXLS.Workbooks.Open^("%Pfad%%Name%%Typ%", , true^)  
ECHO wbkXLS.sheets^("Druck"^).Visible = True  
:: Sheet umbenennen: ECHO wbkXLS.sheets^("Druck"^).name = "new-name"  
ECHO wbkXLS.sheets^("Druck"^).PrintOut  
ECHO wbkXLS.Close 0
ECHO appXLS.DisplayAlerts = True
ECHO appXLS.Quit
)
wscript //NOLOGO print.vbs
del print.vbs
set "prozess=[ i ] Datensendung abgeschlossen!"  
Wbusy "TIMEIT" "" /Stop  
goto :sheet_o_prn

:sheet_o_prn
start Wbusy "TIMEIT" "Datensendung, bitte warten ..."  /marquee  
copy "%Pfad%%Name%%Typ%" .\1-prev.xlsx  

:: convert-Datei erstellen zum Ändern der Kommas in Semikolons (im Vergleich zur reinen vbs: & wurden durch ^& ersetzt (maskiert)
 >convert.vbs ECHO Set XL = CreateObject("Excel.Application")  
>>convert.vbs ECHO Set fso = CreateObject("Scripting.FileSystemObject")  
>>convert.vbs ECHO Set wss = CreateObject("WScript.Shell")  
>>convert.vbs ECHO OrdnerEin = wss.currentdirectory
>>convert.vbs ECHO For Each Datei In fso.GetFolder(OrdnerEin).Files

:: If LCase(fso.GetExtensionName(Datei.Name)) = "xlsx" Then  
>>convert.vbs ECHO If lcase(Datei.name) = "1-prev.xlsx" or lcase(Datei.name) = "2-prev.xlsx" then  
>>convert.vbs ECHO XL.Workbooks.Open Datei.Path
>>convert.vbs ECHO For Each Wsheet In XL.ActiveWorkbook.Worksheets
>>convert.vbs ECHO if fso.FileExists (OrdnerEin ^& "\" ^& fso.GetBaseName(Datei.Name) ^& "_" ^& Wsheet.Name ^& ".csv") Then  
>>convert.vbs ECHO fso.DeleteFile(OrdnerEin ^& "\" ^& fso.GetBaseName(Datei.Name) ^& "_" ^& Wsheet.Name ^& ".csv")  
>>convert.vbs ECHO end if
>>convert.vbs ECHO if wsheet.name ="VT-Plan" then  
>>convert.vbs ECHO Wsheet.SaveAs OrdnerEin ^& "\" ^& fso.GetBaseName(Datei.Name) ^& "_" ^& Wsheet.Name ^& ".csv",6 , , , , False  
>>convert.vbs ECHO End if
>>convert.vbs ECHO Next
>>convert.vbs ECHO XL.ActiveWorkbook.Close False
>>convert.vbs ECHO End If
>>convert.vbs ECHO Next
>>convert.vbs ECHO XL.Quit
>>convert.vbs ECHO Set XL = Nothing
>>convert.vbs ECHO Set wss = Nothing
:: ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
>>convert.vbs ECHO Datei = "VT-Plan_prev.csv"  
>>convert.vbs ECHO Datei1 = "1-prev_VT-Plan.csv"  
>>convert.vbs ECHO Datei2 = "2-prev_VT-Plan.csv"  

:: Hier musst du deinen Header setzen / VBCrLf bedeutet Leerzeile einfügen
>>convert.vbs ECHO Header = "Datum <font id=*ur* size=*2* face=*Arial * color=#FFFFFF></font>;KL;STD;VTR;+;INFO;> > >;-;BMK"  
:: ^& VBCrLf

:: 1_VT-Plan.csv öfnen, komplett einlesen, leere Zeilen (noch mit Kommas!) entfernen
>>convert.vbs ECHO set d1 = fso.OpenTextFile(Datei1)
>>convert.vbs ECHO T = d1.ReadAll
>>convert.vbs ECHO T = Replace(T, ",,,,,,,," ^& VBCrLf, "")  

:: VT-Plan.csv erstellen, Header schreiben, Bei 1_Vt-Plan.csv Kommas in Semikolons ändern und in Datei schreiben
>>convert.vbs ECHO set d = fso.CreateTextFile(Datei)
>>convert.vbs ECHO d.WriteLine Replace(Header, "*", chr(34))  
>>convert.vbs ECHO d.Write Replace(T, ",", ";")  

:: 1_VT-Plan.csv schliessen
>>convert.vbs ECHO d1.close

:: 2_VT-Plan.csv öfnen, komplett einlesen, leere Zeilen (noch mit Kommas!) entfernen, Kommas in Semikolons ändern und in VT-Plan schreiben
>>convert.vbs ECHO set d2 = fso.OpenTextFile(Datei2)
>>convert.vbs ECHO T = d2.ReadAll
>>convert.vbs ECHO T = Replace(T, ",,,,,,,," ^& VBCrLf, "")  
>>convert.vbs ECHO d.Write Replace(T, ",", ";")  

:: 2_vt-plan und vt-plan schliessen
>>convert.vbs ECHO d.close
>>convert.vbs ECHO d2.close

:: 1_vt-plan.csv und 2_vt-plan löschen
>>convert.vbs ECHO If FSO.FileExists(Datei1) then
>>convert.vbs ECHO Set d = fso.GetFile(Datei1)
>>convert.vbs ECHO d.Delete
>>convert.vbs ECHO End If
>>convert.vbs ECHO If FSO.FileExists(Datei2) then
>>convert.vbs ECHO Set d = fso.GetFile(Datei2)
>>convert.vbs ECHO d.Delete
>>convert.vbs ECHO End If

>>convert.vbs ECHO Set fso = Nothing
:: convert-Datei Erstellung erfolgt, durchführen, dann wieder löschen
convert.vbs
del convert.vbs

:: Jetzt wird die letzte Zeile entfernt |Ist ein Enter, das entfernt wird| Alternativtext möglich, dann: set "Zeile=Alternativtext" [content:100029]  
set "Datei=VT-Plan_prev.csv"  
set "Zeile="  

set D=%temp%\DelLastLine.vbs
>%D%  echo Set fso=CreateObject("Scripting.FileSystemObject"):F=WScript.Arguments(0):If WScript.Arguments.Count^>1 Then E=WScript.Arguments(1)  
>>%D% echo T=Split(fso.OpenTextFile(F).ReadAll, vbCrLF):Set O=fso.CreateTextFile(F,True):If E="" Then D=2 Else D=1  
>>%D% echo For i = 0 To UBound(T)-D:O.WriteLine T(i):Next:If E="" Then O.Write T(i):Else:o.Write E:End If:O.Close  

cscript //nologo %D% "%Datei%" "%Zeile%"  
:: ENDE Jetzt wird letzte Zeile entfernt

:: FTP Down- oder Upload
powershell.exe -EP ByPass -Command "$client = new-object System.Net.WebClient; $client.Credentials = New-Object System.Net.NetworkCredential '%s-us%','%s-pw%';$client.UploadFile('ftp://xxx.com/pdf/%Datei%','%Datei%')"  

>.\config\prnt.txt echo "%YYYY%-KW_%kw%.pdf"  

set /p prt=<.\config\prnt.txt
ping /n 6 localhost >nul
.\tools\pdf\wkhtmltopdf https://www.xxx.de/V-Plan/pdf/preview.php %prt%

ping /n 6 localhost >nul
set "prozess=[ i ] Datensendung abgeschlossen!"  
Wbusy "TIMEIT" "" /Stop  

setlocal
 >msgbox.vbs ECHO WScript.Echo InputBox("Preview <> PDF-Archivierung?" ^& vbCrLf ^& _  
>>msgbox.vbs ECHO    "" ^& vbCrLf ^& _  
>>msgbox.vbs ECHO    "" ^& vbCrLf ^& _  
>>msgbox.vbs ECHO    "" ^& vbCrLf ^& _  
>>msgbox.vbs ECHO    "" ^& vbCrLf ^& _  
>>msgbox.vbs ECHO    "" ^& vbCrLf ^& _  
>>msgbox.vbs ECHO "Archivierungsname:", _  
>>msgbox.vbs ECHO "TIMEIT", _  
>>msgbox.vbs ECHO %prt%)
set "prt="  
for /f "delims=" %%i in ('cscript //nologo msgbox.vbs') do set "prt=%%i"  
del msgbox.vbs

if not defined prt goto :print_pdf

start Wbusy "TIMEIT" "Datensendung, bitte warten ..."  /marquee  
>.\config\prnt.txt ECHO %prt%
ren *.pdf %prt%
ping /n 3 localhost >nul


:: FTP Down- oder Upload
powershell.exe -EP ByPass -Command "$client = new-object System.Net.WebClient; $client.Credentials = New-Object System.Net.NetworkCredential '%s-us%','%s-pw%';$client.UploadFile('ftp://xxx.com/vt-plan-archiv/%prt%','%prt%')"  

set "prozess=[ i ] Datensendung abgeschlossen!"  
Wbusy "TIMEIT" "" /Stop  

:print_pdf
:: Abfrage ob pdf gedruckt werden soll
 >msgbox.vbs ECHO x = MsgBox("Drucken '%prt%'?" ^& vbCrLf ^& _  
>>msgbox.vbs ECHO    "",  _  
>>msgbox.vbs ECHO    4 + 32 + 0, _
>>msgbox.vbs ECHO    "TIMEIT")  
>>msgbox.vbs ECHO WScript.Quit(x)
:: vbs aufrufen:
msgbox.vbs
:: Errorlevel für spätere Verarbeitung in Variable sichern:
set /A "Returncode=%errorlevel%"  
:: vbs löschen:
del msgbox.vbs
:: Rueckgabewert der vbs-Datei: %Returncode%
:: Returncode 1=OK, 2=Abbrechen
if %Returncode%==7 goto :ohne_prn
if %Returncode%==6 goto :drucken
exit

:ohne_prn
erase /Q .\config\prnt.txt *.pdf 1-prev.xlsx "1-prev_VT-Plan.csv" preview2.xlsx VT-Plan_prev.csv  
set "prozess=[ i ] Preview <> PDF-Achivierung abgeschlossen!"  
goto :timeit
exit

:drucken
set /p prt=<.\config\prnt.txt
tools\sumatra\sumatraPDF -print-to-default %prt%
erase /Q .\config\prnt.txt *.pdf 1-prev.xlsx "1-prev_VT-Plan.csv" preview2.xlsx VT-Plan_prev.csv  
set "prozess=[ i ] Preview <> PDF-Achivierung abgeschlossen!"  
goto :timeit
exit
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:::::::::::::::::::::::::::  SPRUNGMARKE  ::::::::::::::::::::::::::::::::::::::
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:sicherungen
:: timestamp erzeugen BEGINN
for /f %%a in ('powershell -Command "Get-Date -format yyyy-MM-dd_HH-mm-ss"') do set timestamp=%%a  
:: timestamp erzeugen ENDE
if not exist ".\%sicher%\*.cab" set "prozess=[ i ] Sicherung fehlt!"  
if not exist ".\%sicher%\*.cab" goto :timeit   
setlocal

:wdhst1
set Liste=Liste.txt
set Input=Input.vbs
:: Beschriftung über der Liste zur Auswahl der Dateien
 >%Liste% echo Sicherungen:
>>%Liste% echo  - - -
>>%Liste% echo.
:: Ende der Beschriftung

:: Erstellung der Dateienliste für Auswahlfenster
for /f "tokens=1* delims=:" %%i in ('dir /b/a-d/o-d "%sicher%"^|findstr /n .') do >>"%Liste%" echo %%i : %%j  

 >%Input% echo L=Split(CreateObject("Scripting.FileSystemObject").OpenTextFile("%Liste%").ReadAll,vbCrLf):Max=UBound(L)  
>>%Input% echo Ein=InputBox(Join(L,vbCrLf),"TIMEIT"):If Not IsNumeric(Ein) Then Ein=0:End If:If CInt(Ein)^>Max Then Ein=0:End If:WScript.Echo CInt(Ein)  

for /f %%i in ('cscript //nologo %Input%') do set "Nr=%%i"  
if %Nr%==0 goto :keinegew1

for /f "tokens=1* delims=:" %%i in ('dir /b/a-d/o-d "%sicher%"^|findstr /n .') do >>"%Liste%" echo %%i__%%j  
for /f "tokens=1* delims=_" %%i in ('findstr /b /c:"%Nr%_" %Liste%') do set "Sich=%%j"  
:: Ende Erstellen Dateienliste für Auswahlfenster
erase /Q %Liste%
erase /Q %Input%

if not defined Sich (goto :keinegew1) else (goto :wdhst)

:keinegew1
setlocal
 >msgbox.vbs echo x = MsgBox("Auswahl '%Nr%' nicht vorhanden." ^& vbCrLf ^& _  
>>msgbox.vbs echo   "" ^& vbCrLf ^& _  
>>msgbox.vbs echo   "Auswahl wiederholen?" ^& vbCrLf ^& _  
>>msgbox.vbs echo   "" ^& vbCrLf ^& _  
>>msgbox.vbs echo   "",  _  
>>msgbox.vbs echo   4 + 32 + 0, _
>>msgbox.vbs echo   "TIMEIT")  
>>msgbox.vbs echo WScript.Quit(x)
msgbox.vbs
:: Errorlevel für spätere Verarbeitung in Variable sichern:
set /A "Returncode=%errorlevel%"  
erase /Q msgbox.vbs
:: Rueckgabewert der vbs-Datei: %Returncode%
if %Returncode%==7 goto :keinegew
if %Returncode%==6 goto :wdhst1

:wdhst
 >msgbox.vbs echo x = MsgBox("Sicherung '%Sich%' ausgewählt." ^& vbCrLf ^& _  
>>msgbox.vbs echo    "Start Wiederherstellung?",  _  
>>msgbox.vbs echo    1 + 32, _
>>msgbox.vbs echo    "TIMEIT")  
>>msgbox.vbs echo WScript.Quit(x)
msgbox.vbs
:: Errorlevel für spätere Verarbeitung in Variable sichern:
set /A "Returncode=%errorlevel%"  
erase /Q msgbox.vbs
:: Rueckgabewert der vbs-Datei: %Returncode%
if %Returncode%==1 goto :wdhst2
if %Returncode%==2 goto :keinegew

:wdhst2
if not exist 1.xlsx goto :sich-wdhst

:: Cab-Erzeugung eingangs
makecab.exe /f container.ddf
move "disk1\*.*" ".\vt-plan.cab"  
rmdir disk1 /S /Q

:: Sicherung anlegen
move "vt-plan.cab" ".\%sicher%"  

ren ".\%sicher%\vt-plan.cab" "%timestamp%_sicherung.cab"  

:sich-wdhst
copy ".\%sicher%\%Sich%" .\  
:: Cab-Erzeugung eingangs
expand.exe "%Sich%" -F:1.xlsx .\  
expand.exe "%Sich%" -F:2.xlsx .\  
erase /Q "%Sich%"  
set "prozess=[ i ] '%Sich%' hergestellt!"  
set "sich="  
goto :timeit
exit

:keinegew
set "prozess=[ i ] Sicherung nicht gewählt."  
goto :timeit
exit
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:::::::::::::::::::::::::::  SPRUNGMARKE  ::::::::::::::::::::::::::::::::::::::
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:archivieren
:: timestamp erzeugen BEGINN
for /f %%a in ('powershell -Command "Get-Date -format yyyy-MM-dd_HH-mm-ss"') do set timestamp=%%a  
:: timestamp erzeugen ENDE
:: Dateien kopieren aus gewähltem Pfad
setlocal

set "prozess=[ i ] Wochen downloaden!"  
if not exist 1.xlsx goto :timeit

> msg.vbs echo msgbox"Archivierung: Kommende Woche wird laufende, Auswahl wird kommende Woche.",64,"TIMEIT"  
msg.vbs
erase /Q msg.vbs

 >msgbox.vbs echo WScript.Echo InputBox("Archiv-Verzeichnis: '%sicher%'" ^& vbCrLf ^& _  
>>msgbox.vbs echo    "" ^& vbCrLf ^& _  
>>msgbox.vbs echo    "" ^& vbCrLf ^& _  
>>msgbox.vbs echo    "" ^& vbCrLf ^& _  
>>msgbox.vbs echo    "" ^& vbCrLf ^& _  
>>msgbox.vbs echo    "" ^& vbCrLf ^& _  
>>msgbox.vbs echo    "" ^& vbCrLf ^& _  
>>msgbox.vbs echo    "Laufende Woche  archivieren als:",  _  
>>msgbox.vbs echo    "%header%", _  
>>msgbox.vbs echo    "%timestamp%-KW-%kw%_archiv")  
set "Eingabe="  
for /f "delims=" %%i in ('cscript //nologo msgbox.vbs') do set "Eingabe=%%i"  
erase /Q msgbox.vbs

if defined Eingabe (goto :kopie1) else (goto :timeit)

:kopie1
setlocal
copy /y 1.xlsx ".\%sicher%\%Eingabe%.xlsx"  

:: Cab-Erzeugung eingangs
makecab.exe /f container.ddf
move "disk1\*.*" ".\vt-plan.cab"  
rmdir disk1 /S /Q

:: Sicherung anlegen
move "vt-plan.cab" ".\%sicher%"  
ren ".\%sicher%\vt-plan.cab" "%Eingabe%.cab"  
:: Wochenwechsel
erase /Q 1.xlsx 
ren 2.xlsx 1.xlsx

setlocal
:: VBS Dateiauswahl
 >msgbox.vbs echo 'Bypasses IE7+ c:\fakepath\file.txt problem  
>>msgbox.vbs echo Function BrowseForFile()
>>msgbox.vbs echo With CreateObject("WScript.Shell")  
>>msgbox.vbs echo Dim fso : Set fso = CreateObject("Scripting.FileSystemObject")  
>>msgbox.vbs echo Dim tempFolder : Set tempFolder = fso.GetSpecialFolder(2)
>>msgbox.vbs echo Dim tempName : tempName = fso.GetTempName() ^& ".hta"  
>>msgbox.vbs echo Dim path : path = "HKCU\Volatile Environment\MsgResp"  
>>msgbox.vbs echo With tempFolder.CreateTextFile(tempName)
>>msgbox.vbs echo .Write "<input type=file name=f>" ^& _  
>>msgbox.vbs echo "<script>f.click();(new ActiveXObject('WScript.Shell'))" ^& _  
>>msgbox.vbs echo ".RegWrite('HKCU\\Volatile Environment\\MsgResp', f.value);" ^& _  
>>msgbox.vbs echo "close();</script>"  
>>msgbox.vbs echo .Close
>>msgbox.vbs echo End With
>>msgbox.vbs echo .Run tempFolder ^& "\" ^& tempName, 1, True  
>>msgbox.vbs echo BrowseForFile = .RegRead(path)
>>msgbox.vbs echo .RegDelete path
>>msgbox.vbs echo End With
>>msgbox.vbs echo End Function
>>msgbox.vbs echo wscript.echo BrowseForFile
:: Auslesen der vbs-Variable in batch
for /f "delims=" %%i in ('cscript //nologo msgbox.vbs') do set "Pfad=%%~dpi" & set "Name=%%~ni" & set "Typ=%%~xi"  
:: echo "%Name%" mit Typ "%Typ%" in Pfad "%Pfad%" ergibt: "%Pfad%%Name%%Typ%  
erase /Q msgbox.vbs

if not defined Name goto :timeit
:: Ausgesuchte Datei als 2, also kommende Woche, umbenennen
move "%Pfad%%Name%%Typ%" .\2.xlsx  
set "prozess=[ i ] Archivierung + Wochenwechsel abgeschlossen!"  
goto :timeit
exit
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:::::::::::::::::::::::::::  SPRUNGMARKE  ::::::::::::::::::::::::::::::::::::::
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:lehrer-konto
start Wbusy "TIMEIT" "Datensendung, bitte warten ..."  /marquee  
:: timestamp erzeugen BEGINN
for /f %%a in ('powershell -Command "Get-Date -format yyyy-MM-dd_HH-mm-ss"') do set timestamp=%%a  
:: timestamp erzeugen ENDE
set "prozess=[ i ] Datensendung abgeschlossen!"  
set "person=lehrer"  
set "oil-konto=%person%-konto.xlsx"  
set "off-conv=%person%-konto.csv"  
set "excl-regi=%person%-konto"  
:: FTP Down- oder Upload
powershell.exe -EP ByPass -Command "$client = new-object System.Net.WebClient; $client.Credentials = New-Object System.Net.NetworkCredential '%s-us%','%s-pw%';$client.DownloadFile('ftp://xxx.com/lehrer/%oil-konto%','%oil-konto%')"  
Wbusy "TIMEIT" "" /Stop  
start /wait %oil-konto%
start Wbusy "TIMEIT" "Datensendung, bitte warten ..."  /marquee  
:: vbs vorbereiten, Excel-Daten aus Datei auslesen // Datei enthält Kommata
 >convert.vbs echo Set XL = CreateObject("Excel.Application")  
>>convert.vbs echo Set fso = CreateObject("Scripting.FileSystemObject")  
>>convert.vbs echo Set wss = CreateObject("WScript.Shell")  
>>convert.vbs echo OrdnerEin = wss.currentdirectory
>>convert.vbs echo For Each Datei In fso.GetFolder(OrdnerEin).Files
>>convert.vbs echo If lcase(Datei.name) = "%oil-konto%" then  
>>convert.vbs echo XL.Workbooks.Open Datei.Path
>>convert.vbs echo For Each Wsheet In XL.ActiveWorkbook.Worksheets
>>convert.vbs echo if fso.FileExists (OrdnerEin ^& "\" ^& fso.GetBaseName(Datei.Name) ^& "_" ^& Wsheet.Name ^& ".csv") Then  
>>convert.vbs echo fso.DeleteFile(OrdnerEin ^& "\" ^& fso.GetBaseName(Datei.Name) ^& "_" ^& Wsheet.Name ^& ".csv")  
>>convert.vbs echo end if
>>convert.vbs echo if wsheet.name ="%excl-regi%" then  
>>convert.vbs echo Wsheet.SaveAs OrdnerEin ^& "\" ^& fso.GetBaseName(Datei.Name) ^& "_" ^& Wsheet.Name ^& ".csv",6 , , , , False  
>>convert.vbs echo End if
>>convert.vbs echo Next
>>convert.vbs echo XL.ActiveWorkbook.Close False
>>convert.vbs echo End If
>>convert.vbs echo Next
>>convert.vbs echo XL.Quit
>>convert.vbs echo Set XL = Nothing
>>convert.vbs echo Set wss = Nothing
:: Replace in Datei: In der csv-Datei alle Kommata durch Smikolons ersetzen #######################################
>>convert.vbs echo Datei = "%excl-regi%_%off-conv%"   
>>convert.vbs echo Set fso = CreateObject("Scripting.FileSystemObject")   
>>convert.vbs echo T = fso.OpenTextFile(Datei).ReadAll 
>>convert.vbs echo fso.CreateTextFile(Datei).Write Replace(T, ",", ";")  
:: Ende replace in Datei ############################################################################################
convert.vbs
erase /Q convert.vbs
:: Ausgabe umbenennen
ren "%excl-regi%_%off-conv%" "%off-conv%"  
set "copy=%timestamp%_%oil-konto%"  
:: Datei kopieren und am Ziel umbenennen
copy /b "%oil-konto%" ".\daten\%copy%"  
:: FTP Down- oder Upload
powershell.exe -EP ByPass -Command "$client = new-object System.Net.WebClient; $client.Credentials = New-Object System.Net.NetworkCredential '%s-us%','%s-pw%';$client.UploadFile('ftp://xxx.com/lehrer/%oil-konto%','%oil-konto%')";$client.UploadFile('ftp://xxx.com/lehrer/%off-conv%','%off-conv%')"  
:: ftp-Script löschen und temporäre Daten
erase /Q "%off-conv%" "%oil-konto%"  
set "prozess=[ i ] Datensendung abgeschlossen!"  
Wbusy "TIMEIT" "" /Stop  
goto :timeit
exit
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:::::::::::::::::::::::::::  SPRUNGMARKE  ::::::::::::::::::::::::::::::::::::::
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:pae-konto
start Wbusy "TIMEIT" "Datensendung, bitte warten ..."  /marquee  
:: timestamp erzeugen BEGINN
for /f %%a in ('powershell -Command "Get-Date -format yyyy-MM-dd_HH-mm-ss"') do set timestamp=%%a  
:: timestamp erzeugen ENDE
set "prozess=[ i ] Datensendung abgeschlossen!"  
set "person=pae"  
set "oil-konto=%person%-konto.xlsx"  
set "off-conv=%person%-konto.csv"  
set "excl-regi=%person%-konto"  
:: FTP Down- oder Upload
powershell.exe -EP ByPass -Command "$client = new-object System.Net.WebClient; $client.Credentials = New-Object System.Net.NetworkCredential '%s-us%','%s-pw%';$client.DownloadFile('ftp://xxx.com/lehrer/%oil-konto%','%oil-konto%')"  
Wbusy "TIMEIT" "" /Stop  
start /wait %oil-konto%
start Wbusy "TIMEIT" "Datensendung, bitte warten ..."  /marquee  
:: vbs vorbereiten, Excel-Daten aus Datei auslesen // Datei enthält Kommata
 >convert.vbs echo Set XL = CreateObject("Excel.Application")  
>>convert.vbs echo Set fso = CreateObject("Scripting.FileSystemObject")  
>>convert.vbs echo Set wss = CreateObject("WScript.Shell")  
>>convert.vbs echo OrdnerEin = wss.currentdirectory
>>convert.vbs echo For Each Datei In fso.GetFolder(OrdnerEin).Files
>>convert.vbs echo If lcase(Datei.name) = "%oil-konto%" then  
>>convert.vbs echo XL.Workbooks.Open Datei.Path
>>convert.vbs echo For Each Wsheet In XL.ActiveWorkbook.Worksheets
>>convert.vbs echo if fso.FileExists (OrdnerEin ^& "\" ^& fso.GetBaseName(Datei.Name) ^& "_" ^& Wsheet.Name ^& ".csv") Then  
>>convert.vbs echo fso.DeleteFile(OrdnerEin ^& "\" ^& fso.GetBaseName(Datei.Name) ^& "_" ^& Wsheet.Name ^& ".csv")  
>>convert.vbs echo end if
>>convert.vbs echo if wsheet.name ="%excl-regi%" then  
>>convert.vbs echo Wsheet.SaveAs OrdnerEin ^& "\" ^& fso.GetBaseName(Datei.Name) ^& "_" ^& Wsheet.Name ^& ".csv",6 , , , , False  
>>convert.vbs echo End if
>>convert.vbs echo Next
>>convert.vbs echo XL.ActiveWorkbook.Close False
>>convert.vbs echo End If
>>convert.vbs echo Next
>>convert.vbs echo XL.Quit
>>convert.vbs echo Set XL = Nothing
>>convert.vbs echo Set wss = Nothing
:: Replace in Datei: In der csv-Datei alle Kommata durch Smikolons ersetzen #######################################
>>convert.vbs echo Datei = "%excl-regi%_%off-conv%"   
>>convert.vbs echo Set fso = CreateObject("Scripting.FileSystemObject")   
>>convert.vbs echo T = fso.OpenTextFile(Datei).ReadAll 
>>convert.vbs echo fso.CreateTextFile(Datei).Write Replace(T, ",", ";")  
:: Ende replace in Datei ############################################################################################
convert.vbs
erase /Q convert.vbs
:: Ausgabe umbenennen
ren "%excl-regi%_%off-conv%" "%off-conv%"  
set "copy=%timestamp%_%oil-konto%"  
:: Datei kopieren und am Ziel umbenennen
copy /b "%oil-konto%" ".\daten\pae\%copy%"  
:: FTP Down- oder Upload
powershell.exe -EP ByPass -Command "$client = new-object System.Net.WebClient; $client.Credentials = New-Object System.Net.NetworkCredential '%s-us%','%s-pw%';$client.UploadFile('ftp://xxx.com/lehrer/%oil-konto%','%oil-konto%')";$client.UploadFile('ftp://xxx.com/lehrer/%off-conv%','%off-conv%')"  
:: ftp-Script löschen und temporäre Daten
erase /Q "%off-conv%" "%oil-konto%"  
set "prozess=[ i ] Datensendung abgeschlossen!"  
Wbusy "TIMEIT" "" /Stop  
goto :timeit
exit
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:::::::::::::::::::::::::::  SPRUNGMARKE  ::::::::::::::::::::::::::::::::::::::
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:aufsichten
if not exist 2.xlsx goto :timeit
start Wbusy "TIMEIT" "Datensendung, bitte warten ..."  /marquee  
:: vbs vorbereiten, Excel-Daten aus Datei auslesen // Datei enthält Kommata
 >convert.vbs echo Set XL = CreateObject("Excel.Application")  
>>convert.vbs echo Set fso = CreateObject("Scripting.FileSystemObject")  
>>convert.vbs echo Set wss = CreateObject("WScript.Shell")  
>>convert.vbs echo OrdnerEin = wss.currentdirectory
>>convert.vbs echo For Each Datei In fso.GetFolder(OrdnerEin).Files
>>convert.vbs echo If lcase(Datei.name) = "2.xlsx" then  
>>convert.vbs echo XL.Workbooks.Open Datei.Path
>>convert.vbs echo For Each Wsheet In XL.ActiveWorkbook.Worksheets
>>convert.vbs echo if fso.FileExists (OrdnerEin ^& "\" ^& fso.GetBaseName(Datei.Name) ^& "_" ^& Wsheet.Name ^& ".csv") Then  
>>convert.vbs echo fso.DeleteFile(OrdnerEin ^& "\" ^& fso.GetBaseName(Datei.Name) ^& "_" ^& Wsheet.Name ^& ".csv")  
>>convert.vbs echo end if
>>convert.vbs echo if wsheet.name ="aufsichten" then  
>>convert.vbs echo Wsheet.SaveAs OrdnerEin ^& "\" ^& fso.GetBaseName(Datei.Name) ^& "_" ^& Wsheet.Name ^& ".csv",6 , , , , False  
>>convert.vbs echo End if
>>convert.vbs echo Next
>>convert.vbs echo XL.ActiveWorkbook.Close False
>>convert.vbs echo End If
>>convert.vbs echo Next
>>convert.vbs echo XL.Quit
>>convert.vbs echo Set XL = Nothing
>>convert.vbs echo Set wss = Nothing
:: Replace in Datei: In der csv-Datei alle Kommata durch Smikolons ersetzen #######################################
>>convert.vbs echo Datei = "2_aufsichten.csv"   
>>convert.vbs echo Set fso = CreateObject("Scripting.FileSystemObject")   
>>convert.vbs echo T = fso.OpenTextFile(Datei).ReadAll 
>>convert.vbs echo fso.CreateTextFile(Datei).Write Replace(T, ",", ";")  
:: Ende replace in Datei ############################################################################################
convert.vbs
erase /Q convert.vbs
ren "2_aufsichten.csv" "aufsichten.csv"  

:: FTP Down- oder Upload
powershell.exe -EP ByPass -Command "$client = new-object System.Net.WebClient; $client.Credentials = New-Object System.Net.NetworkCredential '%s-us%','%s-pw%';$client.UploadFile('ftp://xxx.com/pdf/aufsichten.csv','aufsichten.csv')"  
:: pdf erstellen des Aufsichtsplan aus der Webseite
tools\pdf\wkhtmltopdf http://www.xxx.de/V-Plan/pdf/aufsichten.php aufsichten.pdf
:: FTP Down- oder Upload
powershell.exe -EP ByPass -Command "$client = new-object System.Net.WebClient; $client.Credentials = New-Object System.Net.NetworkCredential '%s-us%','%s-pw%';$client.UploadFile('ftp://xxx.com/downloads/aufsichten.pdf','aufsichten.pdf')"  
:: ftp-Script löschen und temporäre Daten
erase /Q "aufsichten.csv"  
set "prozess=[ i ] Datensendung abgeschlossen!"  
Wbusy "TIMEIT" "" /Stop  

 >msgbox.vbs echo x = MsgBox("Drucken Aufsichten?" ^& vbCrLf ^& _  
>>msgbox.vbs echo    "",  _  
>>msgbox.vbs echo    4 + 32 + 0, _
>>msgbox.vbs echo    "TIMEIT")  
>>msgbox.vbs echo WScript.Quit(x)
msgbox.vbs
:: Errorlevel für spätere Verarbeitung in Variable sichern:
set /A "Returncode=%errorlevel%"  
erase /Q msgbox.vbs
if %Returncode%==6 goto :auf-prt
if %Returncode%==7 goto :auf-exit

:auf-prt
tools\sumatra\sumatraPDF -print-to-default "aufsichten.pdf"  
erase /Q "aufsichten.pdf"  
set "prozess=[ i ] Druckauftrag abgeschlossen!"  
goto :timeit

:auf-exit
erase /Q "aufsichten.pdf"  
set "prozess=[ i ] Datensendung abgeschlossen!"  
goto :timeit
exit
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:::::::::::::::::::::::::::  SPRUNGMARKE  ::::::::::::::::::::::::::::::::::::::
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:reinigung
if not exist 1.xlsx set "prozess=[ i ] Wochen fehlen!"  
if not exist 1.xlsx goto :timeit 
erase 1.xlsx 2.xlsx
set "prozess=[ i ] Wochen entfernt!"  
goto :timeit
exit
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:::::::::::::::::::::::::::  SPRUNGMARKE  ::::::::::::::::::::::::::::::::::::::
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:news
del news.txt
set "news="  
setlocal
 >msgbox.vbs echo WScript.Echo InputBox("" ^& vbCrLf ^& _  
>>msgbox.vbs echo    "" ^& vbCrLf ^& _  
>>msgbox.vbs echo    "News eintragen:" ^& vbCrLf ^& _  
>>msgbox.vbs echo    "" ^& vbCrLf ^& _  
>>msgbox.vbs echo "",  _  
>>msgbox.vbs echo "TIMEIT          NEWS-FLASH", _  
>>msgbox.vbs echo "")  
set "all-a="  
for /f "delims=" %%i in ('cscript //nologo msgbox.vbs') do set "news=%%i"  
erase /Q msgbox.vbs
if not defined news set "news="  
>news.txt echo. %news%
start Wbusy "TIMEIT" "Datensendung, bitte warten ..."  /marquee  
:: FTP Down- oder Upload
powershell.exe -EP ByPass -Command "$client = new-object System.Net.WebClient; $client.Credentials = New-Object System.Net.NetworkCredential '%s-us%','%s-pw%';$client.UploadFile('ftp://xxx.com/update/Labor/news.txt','news.txt')"  
del news.txt
set "news="  
set "prozess=[ i ] Datensendung abgeschlossen!"  
Wbusy "TIMEIT" "" /Stop  
goto :timeit
exit
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:::::::::::::::::::::::::::  SPRUNGMARKE  ::::::::::::::::::::::::::::::::::::::
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:drucker
start /wait ms-settings:printers
goto :timeit
exit
:::::::::::::::::::::::::::  SPRUNGMARKE  ::::::::::::::::::::::::::::::::::::::
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:ethernet
start /wait ms-settings:network-ethernet
goto :timeit
exit
:: #############################################################################
:: #########################_P_R_O_G_R_A_M_M_E_N_D_E_###########################
:: #############################################################################