Eine Datei (Wordvorlage) mehrfach x-mal kopieren?

German support forum

Moderators: white, Hacker, Stefan2

Post Reply
juku77
Junior Member
Junior Member
Posts: 6
Joined: 2018-02-03, 11:39 UTC

Eine Datei (Wordvorlage) mehrfach x-mal kopieren?

Post by *juku77 »

Hallo,

habe folgendes Problem:

Ich habe eine Wordvorlage und benötige diese für jede Woche als leeres Formular. Aus diesem Grund möchte ich die Datei auf einem Rutsch x-mal kopieren und diese anschließend mit MUT mit den Daten der Wochen umzubennen, die aus einer txt-Datei kommen. MUT funktioniert ohne Probleme.

Gibt es im TC eine Möglichkeit die Ursprungsdatei auf "einen Rutsch" x-mal zu kopieren und evtl. einen Zähler zu übergeben?
User avatar
Stefan2
Power Member
Power Member
Posts: 4153
Joined: 2007-09-13, 22:20 UTC
Location: Europa

Post by *Stefan2 »

Hi juku77, willkommen.

Das kann man mit einer Skriptsprache deines Betriebssystems erledigen.

Der TC kann dabei einem Skript den Pfad des aktiven und inaktiven Fenster übergeben.

Im Skript könnte man den Pfad zu deiner Wordvorlage fest eintragen.
Das Skript kann die neue Datei auch gleich mit dem aktuellen Datum benennen.

Also, was benötigst du:
- Wordvorlage einfach x-mal mit Zähler kopieren?
- x-mal ist fest vorgegeben, oder wird abgefragt?
- oder
- Wordvorlage wird im aktiven Fenster mit aktuellem Datum erstellt?
oder ....



 
juku77
Junior Member
Junior Member
Posts: 6
Joined: 2018-02-03, 11:39 UTC

Post by *juku77 »

Vielen Dank für die schnelle Antwort:

Folgendes wäre optimal
  • x-mal wird abgefragt
    Wordvorlage wird im aktiven Fenster erstellt
Das mit den aktuellen Datum hilft mir hier nicht weiter, da die Daten in der Zukunft liegen. Für jede Arbeitswoche eine Wordvorlage.
User avatar
Stefan2
Power Member
Power Member
Posts: 4153
Joined: 2007-09-13, 22:20 UTC
Location: Europa

Post by *Stefan2 »

zB so:

- den Code als Textdatei mit VBS-Endung speichern:
C:\Totalcmd\KopiereDatei-inAktivesFenster-mitWoche.vbs

- den Code bei "user settings" anpassen

- Button erstellen (siehe im Skript)

- in einen Ordner wechseln und den Button anklicken

Dies kopiert
"L:\aufwerk\Pfad zu\Wordvorlage.docx"
zu
aktuellem Pfad\Vorlage_(KW7).docx
aktuellem Pfad\Vorlage_(KW8).docx
aktuellem Pfad\Vorlage_(KW9).docx


- Verbesserungswünsche posten.


Code: Select all


REM https://ghisler.ch/board/viewtopic.php?t=49428
REM Kopiere Wordvorlage in aktuellen Ordner mit neuem Namen
REM
REM Button erstellen (siehe http://www.ghisler.ch/wikide/index.php?title=Buttonbar)
REM --- Kommando: "L:\aufwerk\Pfad zu\diesemSkript.vbs"
REM --- Parameter: "%P"
REM --- Startpfad:
REM --- Icondatei: %Commander_Path%\WCMICONS.DLL
REM --- Icon: <aussuchen>
REM --- Tooltip: Kopiere Wordvorlage
REM --- Programm ausführen: [_]als Symbol (minimiert) / [_]maximiert 
REM =========================================================================


REM USER SETTINGS

REM Wordvorlage
strVorlagePfad="L:\aufwerk\Pfad zu\"
strVorlageName="Wordvorlage.docx"

REM geänderter Vorlagename, falls gewünscht:
strNeuerName="Vorlage.docx"



REM Zeichenkette vor bzw. nach dem Zähler (auch LEER erlaubt: ""):
strZaehlerPrefix = "_(KW" 
strZaehlerSuffix = ")"

REM Der neue Namen wird folgendermaßen gebildet:
REM Neuer Name = strNeuerName-BASEname & strZaehlerPrefix & intZaehler & strZaehlerSuffix & strNeuerName-EXTENSION
REM Beispiel: Wordvorlage + _(KW + 7 + ) + .docx





REM =========================================================================
REM DAS SKRIPT

SET FSO	 = WScript.CreateObject("Scripting.FileSystemObject")
SET WSO	 = WScript.CreateObject("WScript.Shell")
SET ARGs = WScript.Arguments

REM aktuell aktives Fenster, TC-Parameter "%P":
If ARGS.Count = 0 Then 
	MsgBox "Kein Parameter übergeben. Ich habe fertig."
	WScript.Quit
Else
	strZielOrdner = ARGs(0)
End If

REM Anzahl Kopien:
intAnzahl = InputBox("Anzahl Kopien:", "TC-Skript", 1) 
  If (intAnzahl = "") Then intAnzahl = 1

REM Zählerstartvorgabe, zB gewünschte Start-KW:
strKW = ISOWeekNum(Now)
intZaehler = 1
intZaehler = InputBox("Zählerstart (z.B. gewünschte StartWoche):", "TC-Skript", strKW) 
  If (intZaehler = "") Then WScript.Quit


REM Erstelle neue Datei durch kopieren mit neuem Namen:
For i=1 to intAnzahl
	REM intZaehler = right("000000"&intZaehler, 2) ' zweistelliger Zähler
	strZielName = FSO.GetBaseName(strNeuerName) & strZaehlerPrefix & intZaehler & strZaehlerSuffix &  "." & FSO.GetExtensionName(strNeuerName)
	REM	MsgBox "CopyFile " & vbLF & strVorlagePfad & "\" & vbLF & strVorlageName & vbLF & " ..zu.. " & vbLF & strZielOrdner & "\" & strZielName
	If Not (FSO.FileExists(strZielOrdner & "\" & strZielName)) Then
		FSO.CopyFile strVorlagePfad & "\" & strVorlageName , strZielOrdner & "\" & strZielName, False
		intZaehler = intZaehler +1
	End If
Next

REM =========================================================================
Function ISOWeekNum(dtmDate)
  ' Returns a WeekNumber from a date
  NearThurs = ((dtmDate+5) \ 7) * 7 - 2
  ISOWeekNum = ((NearThurs - DateSerial(Year(NearThurs), 1, 1)) \ 7) + 1
End function
REM =========================================================================






 
juku77
Junior Member
Junior Member
Posts: 6
Joined: 2018-02-03, 11:39 UTC

Post by *juku77 »

Ich bin geplättet :shock:

Vielen lieben Dank, werde es testen und mich dann nochmals melden.

Hab jetzt nen Umweg über Word Serienbrief gemacht -> deine Alternative ist bestimmt eleganter...
juku77
Junior Member
Junior Member
Posts: 6
Joined: 2018-02-03, 11:39 UTC

Post by *juku77 »

Hammer,

nochmals besten Dank.

2 Punkte noch:

1. wie passe ich den Pfad an, wenn darin ein Umlaut enthalten ist, z.B. /Jürgen/?

2. Ist es mit geringen Aufwand möglich, statt der KW jeweils die Daten der KW von Montag bis Freitag nach Muster YYYY-MM-DD_YYYY-MM-DD_Name.dotx auszugeben?
User avatar
Stefan2
Power Member
Power Member
Posts: 4153
Joined: 2007-09-13, 22:20 UTC
Location: Europa

VBScript: Kopiere Vorlage und Kalenderwoche Datum

Post by *Stefan2 »

zu 1:
wieso? einfach so schreiben?!?
Umlaute sind doch kein Problem? Oder?





zu 2:

zB so:

- den Code als Textdatei mit VBS-Endung speichern:
C:\Totalcmd\KopiereDatei-inAktivesFenster-mitWoche.vbs

- den Code bei "user settings" anpassen

- Button erstellen (siehe im Skript)

- in einen Ordner wechseln und den Button anklicken

Dies kopiert
"L:\aufwerk\Pfad zu\Wordvorlage.docx"
zu
2018-02-12_2018-02-16 Vorlage.docx
2018-02-19_2018-02-23 Vorlage.docx
2018-02-26_2018-03-02 Vorlage.docx

Code: Select all


REM https://ghisler.ch/board/viewtopic.php?t=49428
REM Kopiere Wordvorlage in aktuellen Ordner mit neuem Namen
REM
REM Button erstellen (siehe http://www.ghisler.ch/wikide/index.php?title=Buttonbar)
REM --- Kommando: "L:\aufwerk\Pfad zu\diesemSkript.vbs"
REM --- Parameter: "%P"
REM --- Startpfad:
REM --- Icondatei: %Commander_Path%\WCMICONS.DLL
REM --- Icon: <aussuchen>
REM --- Tooltip: Kopiere Wordvorlage
REM --- Programm ausführen: [_]als Symbol (minimiert) / [_]maximiert 
REM =========================================================================


REM USER SETTINGS

REM Wordvorlage
strVorlagePfad="L:\aufwerk\Pfad zu\"
strVorlageName="Wordvorlage.docx"



REM geänderter Vorlagename, falls gewünscht:
strNeuerName="Vorlage.docx"

REM Ergebnisbeispiele Mo-Fr:
' 2018-02-12_2018-02-16 Vorlage.docx
' 2018-02-19_2018-02-23 Vorlage.docx
' 2018-02-26_2018-03-02 Vorlage.docx



REM =========================================================================
REM DAS SKRIPT

SET FSO	 = WScript.CreateObject("Scripting.FileSystemObject")
SET WSO	 = WScript.CreateObject("WScript.Shell")
SET ARGs = WScript.Arguments

REM aktuell aktives Fenster, TC-Parameter "%P":
If ARGS.Count = 0 Then 
	MsgBox "Kein Parameter übergeben. Ich habe fertig."
	WScript.Quit
Else
	strZielOrdner = ARGs(0)
End If

REM Anzahl Kopien:
intAnzahl = InputBox("Anzahl Kopien:", "TC-Skript", 1) 
  If (intAnzahl = "") Then intAnzahl = 1

REM Zählerstartvorgabe, zB gewünschte Start-KW:
strKW = ISOWeekNum(Now)
intZaehler = 1
intZaehler = InputBox("Zählerstart (z.B. gewünschte StartWoche):", "TC-Skript", strKW) 
  If (intZaehler = "") Then WScript.Quit


REM Erstelle neue Datei durch kopieren mit neuem Namen:
For i=1 to intAnzahl

	'Neuer Dateiname:
	'Daten der KW von Montag bis Freitag nach Muster "YYYY-MM-DD_YYYY-MM-DD_Name.dotx "

	sStart = GetDateFromWeek(intZaehler)
	strDateStart = DatePart("yyyy",sStart) &"-"&  right("0"&DatePart("m",sStart),2) &"-"& right("0"&DatePart("d",sStart),2)
	sEnde = GetDateFromWeek(intZaehler+1)
	strDateEnde = DatePart("yyyy",sEnde) &"-"&  right("0"&DatePart("m",sEnde),2) &"-"& right("0"&DatePart("d",sEnde)-3,2)	
	
	strZielName = strDateStart &"_"& strDateEnde &" "& strNeuerName
	

	If Not (FSO.FileExists(strZielOrdner & "\" & strZielName)) Then
		FSO.CopyFile strVorlagePfad & "\" & strVorlageName , strZielOrdner & "\" & strZielName, False
		intZaehler = intZaehler +1
	End If
Next

REM =========================================================================
Function ISOWeekNum(dtmDate)
  ' Returns a WeekNumber from a date
  NearThurs = ((dtmDate+5) \ 7) * 7 - 2
  ISOWeekNum = ((NearThurs - DateSerial(Year(NearThurs), 1, 1)) \ 7) + 1
End function
REM =========================================================================
Function GetDateFromWeek( nWeek )
	nCurWeek = DatePart("ww", Now, vbFirstFourDays)
	vStart = DateSerial(Year(Now), Month(Now), Day(Now))
	vStart = DateAdd("ww", nWeek - nCurWeek, vStart)
	nDay = Weekday(vStart, vbMonday)
	GetDateFromWeek = DateAdd("d", -nDay + vbMonday - 1, vStart)
End Function
REM =========================================================================






 
juku77
Junior Member
Junior Member
Posts: 6
Joined: 2018-02-03, 11:39 UTC

Post by *juku77 »

Vielen Dank, klappt.

Nochmals zu Punkt 1:

liegt die Vorlage in einem Ordner mit Umlaut wird eine Fehlermeldung angezeigt.

Fehler in Zeile 74 - Pfad nicht gefunden.

Liegt die Vorlage ausserhalt eines Verzeichnisses mit einem Umlaut funzt es.

Wäre nur kosmetik ...
User avatar
Stefan2
Power Member
Power Member
Posts: 4153
Joined: 2007-09-13, 22:20 UTC
Location: Europa

Post by *Stefan2 »

juku77 wrote: liegt die Vorlage in einem Ordner mit Umlaut wird eine Fehlermeldung angezeigt.

Fehler in Zeile 74 - Pfad nicht gefunden.
Zeile 74: FSO.CopyFile strVorlagePfad & "" & strVorlageName , strZielOrdner & "" & strZielName, False







Kann ich nicht nachvollziehen. Umlaute sollten auch nicht stören.

Ich habe deshalb nochmal getestet:




Code: Select all

SET FSO  = WScript.CreateObject("Scripting.FileSystemObject")
SET ARGs = WScript.Arguments


strVorlagePfad="c:\temp\TC/Jürgen/"

strVorlageName="Öltanker und Ärzte haben öfters Überraschungsärger.jpg" 

strZielOrdner = ARGs(0)
FSO.CopyFile strVorlagePfad & "\\" & strVorlageName , strZielOrdner & "\\\\Copy 5 " & strVorlageName, False 

Habe ich keine Probleme mit. :D
Auch nicht bei mehrfachen Backslashes, falls das jemand denken sollte.


Muss an etwas anderem liegen :)



Hast du eventuell Leerzeichen in deinem Pfad zu /Jürgen/ und den '%P'-Parameter nicht in Anführungszeichen gesetzt?


 
juku77
Junior Member
Junior Member
Posts: 6
Joined: 2018-02-03, 11:39 UTC

Post by *juku77 »

Nochmals vielen Dank für die super Unterstützung.

Mein Ü Problem bleibt, aber damit kann ich leben :oops:
Post Reply