FAQs: TC Automatisieren Skripten (Für jede Datei / Alle Dateien)

German support forum

Moderators: Stefan2, white, sheep, Hacker

Post Reply
User avatar
Stefan2
Power Member
Power Member
Posts: 2554
Joined: 2007-09-13, 22:20 UTC
Location: Europa

FAQs: TC Automatisieren Skripten (Für jede Datei / Alle Dateien)

Post by *Stefan2 » 2018-07-26, 10:09 UTC

Der TC kann dich bei der Automatisierung deiner Aufgaben unterstützen.
Dazu stellt er dir (zum Beispiel) eine temporäre Liste mit den Namen der ausgewählten Dateien bereit.


Siehe hierzu Menü "Konfigurieren > Buttonbar ändern..."
und im "Buttonbar ändern"-Dialog die [Hilfe] aufrufen:

Auszug:
"%P" - Aktueller Pfad.
"%T" - Pfad im inaktiven Fenster/Panel.
"%N" - Dateiname (siehe auch %O und %E) oder Ordnername\
%P%N - Pfad\Dateiname
"%L","%F" - erzeugen im TEMP-Verzeichnis eine Listendatei mit den Namen der markierten Dateien. (auch "%WL", "%WF", "%UL" und "%UF")

...und noch einige mehr.


Diese TC-Parameter verwendest du in einem Button oder einem "Benutzerdefinierten Befehl" (UDC, user defined command).
Ein UDC kannst du auch als Befehl in einen Button angeben, und du kannst diesem UDC ein Tastaturkürzel vergeben.
Somit ist ein UDC universeller einsetzbar, ein Button aber schneller erstellt (weil direkter Zugriff und weniger Schritte).

Wie man das jeweils genau macht steht weiter unten. Siehe hierzu auch die anderen "FAQs:" Posts wie zum Beispiel:
FAQs: Button anlegen / Buttonbar erstellen / Icons
FAQs: TCs' user commands (em_xxxxx) UserCmd.ini UDC







Beachte

- Pfade und Parameter sollten immer gequoted werden ("...") um eventuelle Leerzeichen zu berücksichtigen.
Aber der TC setzt auch von sich aus Pfade in Anführungszeichen, FALLS er Leerzeichen entdeckt.
Hier hilft oft nur ausprobieren, oder das Quoting im eigenen Skript abzufangen und selbst zu harmonisieren.

- Umgebungsvariablen "%...%" wie zB %Commander_Path" und "%AppData% sollten nur im "Kommando"-Feld eingegeben werden.
- TC-Parameter wie zB "%F" und %P%N sollten nur im "Parameter"-Feld eingegeben werden.
- Prozentzeichen von Skriptinterpretern wie zB "%i" und "%{$_}" müssen im "Parameter"-Feld durch Verdopplung "escaped" werden: "%%i", "%%{$_}"
- Für PowerShell-Parameter müssen die Anführungszeichen verdreifacht werden ( "%F" >> """%F"""),
oder, falls es keine PoSh-Variable ist, welche expandiert werden muss, in einfachen Anführungszeichen gesetzt werden ('%F').

- Ein ' * ' Stern als erstes Zeichen im "Kommando"-Feld startet die angegebene Anwendung mit Adminrechten (elevated run as admin)
- Ein ' ? ' Fragezeichen als erstes Zeichen im "Parameter"-Feld zeigt den Befehl beim Ausführen noch einmal an (Überprüfen + Modifizieren)


- - -


Skript erstellen

Als Skriptsprache kann, je nach Aufgabe und Möglichkeiten der Skriptsprache,
zB eine MS DOS-Batch, ein PowerShell, VBScript, JS JavaScript, AutoHotkey oder Anderes verwendet werden.


Das Skript wird folgendermaßen vom TC aus aufgerufen:
Kommando: "%Commander_Path%\myTools\mySkript.VBS"
Parameter: "%L"


(Der Parameter "%Commander_Path%" wird durch den Pfad zum TC-Installationsordner des laufenden TCs ersetzt)




"%L" (auch "%F", "%WL", "%WF", "%UL" und "%UF") - erzeugen im TEMP-Verzeichnis des Benuzters (%temp%)
eine Textdatei mit einer Liste der Namen der markierten Dateien, je nach Parameter inklusive Pfad oder nicht.

(Mit "Dateien" meinen wir Beides, Dateien und Ordner. Beim Exportieren der Namen stellt der TC bei allen Ordnern einen
Backslash ("\") hinten an (X:\IchBinEinOrdner\), bei Dateien natürlich nicht, dadurch kann man im Skript Dateien und Ordner unterscheiden.
Oder man verwendet dazu die Fähigkeiten "seiner" Skriptsprache)


Beispiel:
C:\Users\Dein Benutzername\AppData\Local\Temp\WER9F1A.tmp
("WER9F1A" ist eine jeweils andere, beliebige vom TC vergebene Zeichenfolge)
(Verwende diese Parameter immer mit Anführungszeichen ("...") für den Fall, dass du Leerzeichen im Benuzternamen hast)

Beispiel Dateiinhalt bei Verwendung von "%L" oder "%WL" oder "%UL"
L:\aufwerk\Pfad zum Ordner\mit\Datei 1.ext
L:\aufwerk\Pfad zum Ordner\mit\Datei 2.ext
L:\aufwerk\Pfad zum Ordner\mit\Datei 3.ext

Beispiel Dateiinhalt bei Verwendung von "%F" oder "%WF" oder "%UF"
Datei 1.ext
Datei 2.ext
Datei 3.ext


Im Skript musst du die Parameter (hier "%L") übernehmen (zB mittels %1, $Args[0], oder Ähnlichem),
dann diese Temp-Datei lesen und Zeile-für-Zeile abarbeiten.
Auch beim Abarbeiten musst du dich um die Anführungszeichen ("Datei 1.ext") selbst kümmern.

Falls dein Skript komplett in die Button-Box passt (also ohne extra Skriptdatei),
dann wird der TC-Parameter direkt im Parameterfeld eingetragen (also zB ' TYPE "%L" ')
und vom TC expandiert zu zB ' TYPE "C:\Users\Dein Benutzername\AppData\Local\Temp\WER9F1A.tmp" '




Beispiele:

-------------------------------------- Beispiel 1 (alles innerhalb eines Buttons, ohne extra Skriptdatei)
Kommando: cmd /k
Parameter: for /F "delims=" %%Z in ( ' TYPE "%L" ' ) do @ECHO %%Z
Startpfad:
Icondatei: C:\windows\system32\cmd.exe
Tooltip : Test|DOS Batch

--------------------------------------
Hier wird die WindowsTM CMD.exe als Anwendung gestartet, welche dann die übergebenen Parameter ausführt.



-------------------------------------- Beispiel 2 (führe eine Skriptdatei aus)
Kommando: "%COMMANDER_PATH%\TOOLs\ForEachSelectedDO.vbs"
Parameter: "%L"
Startpfad:
Icondatei: C:\windows\System32\WScript.exe,2
Tooltip : Test|ForEachSelectedDO VBS

--------------------------------------
Hier wird die mit 'VBS' verknüpfte Anwendung cscript.exe oder wscript.exe gestartet, welche dann die Skriptdatei ausführt und die Parameter übergibt.
Inhalt des Beispielskript "ForEachSelectedDO.vbs"
~~~~~~~~~~~~~~~~~~~~~
Set strTCTempFile = CreateObject("Scripting.FileSystemObject").OpenTextFile(WScript.Arguments(0), 1)
Do While Not strTCTempFile.AtEndOfStream
MsgBox strTCTempFile.ReadLine
Loop

--------------------------------------



-------------------------------------- Beispiel 3 (alles innerhalb eines Buttons)
Kommando: PowerShell -NoExit
Parameter: Get-Content '%L' | ForEach-Object{ $_ }
Startpfad:
Icondatei: powershell.exe
Tooltip : Test|PowerShell

--------------------------------------
Hier wird die PowerShell.exe aufgerufen, welche die Befehle "Get-Content" und "ForEach" ausführt.


-------------------------------------- Beispiel 4 (führe eine Skriptdatei aus. AHK ist bei mir nicht installiert sondern wird "portable" ausgeführt.)
Kommando: "%COMMANDER_PATH%\TOOLs\AHK\autohotkey.exe " "%COMMANDER_PATH%\TOOLs\ForEachFileDo.ahk"
Parameter: "%L"
Startpfad:
Icondatei: "%COMMANDER_PATH%\TOOLs\AHK\autohotkey.exe"
Tooltip : Test|ForEachFileDo AHK

--------------------------------------
Hier wird die Autohotkey.exe gestartet, mit der "ForEachFileDo.ahk" Skriptdatei und "%L" als Parameter.
Autohotkey übernimmt das Argument mittels "%1%" und verarbeitet die Dateiliste Zeile-für-Zeile.

ForEachFileDo.ahk
~~~~~~~~~~~~~~~~~
Loop, Read, %1%
MsgBox %A_LoopReadLine%

--------------------------------------



-------------------------------------- Beispiel 5 (führe eine Skriptdatei aus)
Kommando: X:\myFolder>ForFiles /M *.txt /c "cmd /c SetModifiedToCreated1.cmd @file"
Parameter:
Startpfad:
Icondatei: C:\windows\system32\cmd.exe
Tooltip : Test|Call Batch|Set Modified date To Created date

--------------------------------------
Hier wird im Ordner "X:\myFolder" das WindowsTM-Programm "ForFiles" aufgerufen, welches für jede *.TXT-Datei die "SetModifiedToCreated1"-Batch ausführt.
SetModifiedToCreated1.cmd
~~~~~~~~~~~~~~~~~~~~~~~~~~
SET myfile=%~1
REM Touch for Win32, Steve P. Miller 1997 http://pobox.com/~stevemil
for /f "tokens=2 skip=4" %%A in ('touch.exe /c /v %myfile%') DO @SET Timestamp=%%A
touch /m /d %Timestamp% %myfile%

--------------------------------------



- - -



Um einen Button "von Hand" zu erstellen:


- Rechtklick auf einen freien Platz in der Buttonbar, > "Ändern..." anklicken - (oder Menü "Konfigurieren > Buttonbar ändern...")
- Wähle den Button aus, neben dem du einen neuen Button erstellen möchtest und
- klicke auf [Anfügen]
- Als Nächstes kann du den Button konfigurieren.... zB:

--------------------------------------
Kommando: "L:\aufwerk\pfad zum Programmordner\ProgrammX\ABC.exe"
Parameter: %P%N (oder "%F", oder "%L", oder...)
Startpfad: Meistens leer lassen
Icondatei: Datei mit einem Icon. (zB WCMICONS.DLL)
Tooltip : Was macht dieser Button|hier Zeilenumbruch|erneuter Umbruch

--------------------------------------


Das "Kommando" und die "Icondatei" werden immer benötigt. Die "Parameter" nur bei Bedarf. Der "Startpfad" bleibt meistens leer.
Als Kommando gib den Befehl ein, wie man ihn auch im Kommandozeileninterpreter (einer DOS-Box) eingeben würde.
Probiere den Befehl zuerst mal in einer DOS-Box aus und lies die Anleitung der externen Programme.
Für "portable Pfade" wie zB "%COMMANDER_PATH%" siehe http://www.ghisler.ch/wikide/index.php/Navigation#Pseudo-Umgebungsvariablen

Weitere Icon-Resourchen findest du dort > https //ghisler.ch/board/viewtopic.php?p=305387#p305387 (viewtopic.php?p=305387#p305387)



- - -


Button kopieren / austauschen

Einen Button kann man auch über die Zwischenablage kopieren und einfügen.
Somit kann man Buttons auch über das Forum mit Anderen austauschen.
Solch einen Button-Code erkennt man an der ersten Zeile, welche immer lautet: "TOTALCMD#BAR#DATA"
Der Austausch erfolgt über das Kontextmenü eines Buttons bzw. der Buttonbar.




- - -


Einen "Benutzerdefinierten Befehl" (UDC, User-defined Command) anlegen

- Rechtklick auf einen freien Platz in der Buttonbar, > "Ändern..." anklicken
- klicke auf [Anfügen]
- Im Button-Dialog auf das [Lupensymbol] klicken
- Links, die Kategorie "usercmd.ini" auswählen
- Unten, auf Button [Neu] klicken
- Name für den benutzerdefinierten Befehl eingeben, z.B. [ em_MeinErstesUDC ] (das "em_" muss sein!)
- Auf Button [OK] klicken

Eigenschaften für den Befehl eingeben...z.B.:
--------------------------------------
Kommando: "L:\aufwerk\pfad zum Programmordner\ProgrammX\ABC.exe"
Parameter: %P%N (oder "%F", oder "%L", oder...)
Startpfad: Meistens leer lassen
Icondatei: Datei mit einem Icon. (zB WCMICONS.DLL)
Tooltip : Was macht dieser Button|hier Zeilenumbruch|erneuter Umbruch

--------------------------------------

- Den Dialog mit [OK] schließen.
- Den Befehlsbrowser mit [OK] schließen.
- (Den Button-Dialog mit [OK] schließen, falls geöffnet)

Fertig.




- - -


Einem Befehl (em_ oder cm_) ein Tastaturkürzel zuweisen

- Öffne Menü "Konfigurieren > Einstellungen"
- Wähle auf der linken Seite "Diverses"
- Im Bereich "Tastenkombination umdefinieren"
- Bei Tastaturkürzel wähle eine freie Kombination
- Klicke auf das Vergrößerungsglas um ein Kommando auszusuchen
- Tippe em_ (oder cm_) zum filtern und wähle das gewünschte Kommando (z.B.: em_Rechner)
- Bestätige mit dem [grünen Haken]-Button.
- Schließe den Einstellungsdialog mit [OK]
- Noch einmal [OK] und Fertig.

Über die Taste mit dem großen Pfeilsymbol kannst du dir die bereits vergebenen Kombination ansehen.




- - -


Einem Befehl einen Alias zuweisen

- Öffne Menü "Konfigurieren > Einstellungen"
- Wähle auf der linken Seite "Diverses"
- Im Bereich "Tastenkombination umdefinieren"
- Bei "(o) Alias:" vergebe ein Kürzel als Alias, zB. 'hh'
- Klicke auf das Vergrößerungsglas um ein Kommando auszusuchen
--- Filter: help > > > findet zB "cm_HelpIndex (Hilfe: Index)"
- Bestätige mit dem [grünen Haken]-Button.
- [OK]

Jetzt kann man in der TC-Kommandozeile 'hh' plus ENTER-Taste verwenden um die Hilfe aufzurufen.
Für einen sinnvolleren Anwendungszweck siehe zB "FAQs: Dateien auswählen markiern selektieren"




- - -


In einen Button kannst du auch mehrere Kommandos, durch ein Komma getrennt, nacheinander aufrufen.

Beispiel:
Kommando: cm_About,cm_HelpIndex,cm_FtpConnect



Das funktioniert auch mit einem "Benutzerdefinierten Befehl":

[em_CDzuOrdner]
cmd= CD X:\Projekte\2018\

Kommando: cm_FocusRight,em_CDzuOrdner,cm_SrcByDateTime


cm_FocusRight=4002;Focus on right file list
cm_SrcByDateTime=324;Source: Sort by date




- - -

Weitere Informationen:

FAQs: TC Automatisieren Scripten Steuern Skripten
https //www.ghisler.ch/board/viewtopic.php?t=49107 (https://www.ghisler.ch/board/viewtopic.php?t=49107)

Post 1 - Button und Benutzerdefinierte Befehle
Post 2 - Quoting / Anführungszeichen
Post 3 - Aktionen für ausgewählte Dateien
Post 4 - Externe Tools zur Abarbeitung der ausgewählten Dateien
Post 5 - TC von außen steuern / SendMessage / WM_USER
Post 6 - Externe Tools zur direkten Dateimanipulation


- - -

Beispiele

Plugin für batch Image resize? viewtopic.php?f=2&t=50539





Verwende ein VBScript in Spalten und UmbenennTool

Um das Ergebnis eines Skriptes im MUT MultiUmbenennTool bzw.
als Benutzerdefinierte Spalte (CustomColumns) zu verwenden, muss man ein Plugin zwischen schalten.

"Script Content Plugin" https://www.ghisler.ch/board/viewtopic.php?p=68714
(how-to manual: https://www.ghisler.ch/board/viewtopic.php?p=206065#p206065)

"WinScript Advanced Content Plugin" http://ghisler.ch/board/viewtopic.php?t=44032



Installiere eins dieser Plugins, schreibe dein Skript, konfiguriere das Plugin und verwende es.

Example script
Show

Code: Select all

'///  https://ghisler.ch/board/viewtopic.php?p=354247#p354247
' Re: Multi Rename Tool. Is there a GREAT Grandparent directory?



'// ==============================================================
'*** Script for Script Content Plugin 0.2
'*** http://www.totalcmd.net/plugring/script_wdx.html
'*** http://wincmd.ru/plugring/script_wdx.html
'*** In default var "filename" is the current file incl. full path

'// Nach Installation im Installationsverzeichnis des Plugins eine Datei namens "NameOfMyScript.vbs" mit dem gewünschten Scriptcode anlegen.
'// After installation create a file "NameOfMyScript.vbs" in the plugin installation folder with the wanted script code.
'-----------------------------
'
'// "Script Content Plugin"-Basics:
'	"filename" is a build-in variable to hold the current processed full filename (D:\Rive\Path to\file name.ext).
'	Example: filename equals e.g. "c:\Python 3.1\Tools\versioncheck\py version check.py"
'-----------------------------
'
'// Use VBS-code to do something to that "filename".
'    Example code:
'      strFullName = filename
'    	'MsgBox "Current FullName: " & strFullName
'      
'      strPath = left(strFullName, InstrRev(strFullName, "\") -1)
'    	'MsgBox "Path: " & strPath
'      
'      strParent = mid(strPath , InStrRev(strPath, "\") +1)
'    	'MsgBox "Parent folder: " & strParent
'      
'      strName = mid(strFullName, InstrRev(strFullName, "\") +1)
'    	'MsgBox "Name: " & strName
'      
'      If InStr(strName, ".") Then
'        strBase = left(strName, InstrRev(strName, ".") - 1 )
'        strExte = mid( strName, InstrRev(strName, ".") + 1 )
'    		'MsgBox "Base: " & strBase & "  <DOT>  " & strExte
'      End If
'-----------------------------
'
'// Use "content=", "content1=" and up to "content9=" to store the wanted script result.
'Example:
'content  = strExte   ' use [=script.Result] 
'content1 = strPath   ' use [=script.Result1] 
'content2 = strName   ' use [=script.Result2]
'...
'content9 = "" 			' use [=script.Result9]
'-----------------------------
'
'// Um dieses Skript zu verwenden, editiere die script.ini:
'// To use this script, modify the script.ini:
 '[Script]
 'Section=NameOfMySection
'
 '[NameOfMySection]
 'LongName=0
 'ParseDirs=1
 'Script=NameOfMyScript.vbs
'-----------------------------
'
'// In TC verwende "[=script.Result]", "[=script.Result1]" bis zu "[=script.Result9]"
' im MultiUmbenennTool oder für Benutzerdefinierte Spalten.
'// In TC use "[=script.Result]", "[=script.Result1]" and up to "[=script.Result9]"
'in MultirenameTool or user defined CustomCulumns.
'// ==============================================================
'// ==============================================================
'// ==============================================================


'// Dedicated example script for: Multi Rename Tool. Is there a GREAT Grandparent directory?

'// Get Level of directory paths:

		Set FSO = CreateObject("Scripting.FileSystemObject")
		sFullName = filename
		If(Right(sFullName,1)= "\") Then 		' It's a folder (TC add trailing backslash)
			Set oItem 			= FSO.GetFolder(sFullName)
		Else									' It's a file
			Set oItem 			= FSO.GetFile(sFullName)
		End If        
		iFileCount = iFileCount + 1
        sName   = FSO.GetFileName(oItem)		' "File.txt"
        sBase   = FSO.GetBaseName(oItem)		' "File"
        sExte   = FSO.GetExtensionName(oItem)	' "txt" (no dot)
		sDrive  = FSO.GetDriveName(oItem)		' "X:"
		'------------------------------------------------------
		sPath   = FSO.GetParentFolderName(oItem)
		'sPath   = oItem.ParentFolder
		
		aPathParts = split(sPath, "\")
		iUBound = UBound(aPathParts)
							  sParentFolder1 = aPathParts(iUBound)
		If (iUBound > 0) Then sParentFolder2 = aPathParts(iUBound -1)
		If (iUBound > 1) Then sParentFolder3 = aPathParts(iUBound -2)
		If (iUBound > 2) Then sParentFolder4 = aPathParts(iUBound -3)
		If (iUBound > 3) Then sParentFolder5 = aPathParts(iUBound -4)
		If (iUBound > 0) Then sTopFolder1  	 = aPathParts(1)
		If (iUBound > 1) Then sTopFolder2 	 = aPathParts(2)
		If (iUBound > 2) Then sTopFolder3 	 = aPathParts(3)
		
		
		strParentDir = sParentFolder1
		strGrandPaDir = sParentFolder2
		strGtGrandPaDir = sParentFolder3
		sGtGtGrandPaDir = sParentFolder4
		sGtGtGtGrandPaDir = sParentFolder5
		
		'oItem.DateCreated	
		'oItem.DateLastAccessed
		'oItem.DateLastModified



'//Give the result(s) back to TC
content  = strParentDir  			 ' use [=script.Result]  in TC and remove [E] from extension field
content1 = strGrandPaDir                 ' use [=script.Result1] in TC
content2 = strGtGrandPaDir               ' use [=script.Result2]
content3 = sGtGtGrandPaDir
content4 = sGtGtGtGrandPaDir
content9 = ""

'Example:
'For file: c:\Windows\System32\DriverStore\drvindex.dat
'[=script.Result2] # [=script.Result1] # [=script.Result] # [N]
'Result: Windows # System32 # DriverStore # drvindex.dat

'// END


- - -

FAQs: TC Plugin Add-On AddOn Externe Tools verwenden
viewtopic.php?p=342114#p342114

FAQs: Benutzerdefinierte Spaltenansicht / Dateieigenschaften anzeigen
viewtopic.php?p=335840#p335840




Mal was anderes:
https://www.youtube.com/watch?v=tussa6KKCZU


 
Inofficial FAQs || WIKI (Deu/Eng) || TC Home (What's new? // FAQ // Download // Order // Addons // Tools // Plugins)
Erst wenn der letzte Baum gefällt oder die letzte Biene verendet ist, werden die Leute verstehen warum Umweltschutz wichtig ist.

matixx
Power Member
Power Member
Posts: 952
Joined: 2003-03-21, 02:37 UTC
Location: ....
Contact:

Re: FAQs: TC Automatisieren / Scripten / Für jede Datei / Alle Dateien

Post by *matixx » 2018-07-26, 13:55 UTC

Danke dir.

Was hältst du davon hier auch den "TCTdT" zu verwenden ?

Post Reply