Button zum Erstellen eines temp Ordners & Öffnen in neuem Tab

German support forum

Moderators: white, Hacker, Stefan2

Post Reply
DelphiDev
Junior Member
Junior Member
Posts: 94
Joined: 2019-03-22, 12:03 UTC

Button zum Erstellen eines temp Ordners & Öffnen in neuem Tab

Post by *DelphiDev »

Hallo zusammen,

ich möchte einen Button, mit dem ich in einem vordefinierten Ordner einen neuen Ordner anlege (am liebsten mit Timestamp zB YMDhms als Name) und diesen Ordner dann im Target Panel als neuen Tab öffnen kann

Ich habe schon versucht

Code: Select all

cm_makedir <[YMDhms], cm_OpenNewTab <[YMDhms]


in einem User Command aufzurufen, aber die Parameter für cm_makedir und cm_OpenNewTab scheinen ignoriert zu werden?

Hat jemand eine Idee, wie ich das bewerkstelligen könnte?

Danke
User avatar
Stefan2
Power Member
Power Member
Posts: 4133
Joined: 2007-09-13, 22:20 UTC
Location: Europa

Re: Button zum Erstellen eines temp Ordners & Öffnen in neuem Tab

Post by *Stefan2 »

Einen neuen Ordner kannst du dir mit dem DOS-Befehl "MkDir" anlegen.

Benutzer-definiertes Kommando in der usercmd.ini:

Code: Select all

[em_MdDIR]
cmd=cmd /c md nul
Param="TEST"



Für den von dir gewünschten Namen kannst du auf die Systemvariable %DATE% zurückgreifen,
und dir aus %DATE% die gewünschte Teile extrahieren:
C:\Users\STE Fan> echo %date%
02.03.2020

C:\Users\STE Fan>echo %Date:~-4,4% +++ %Date:~-7,2% ### %Date:~0,2%
2020 +++ 03 ### 02


Siehe die Hilfe zum SET-Befehl: set /?
%PATH:~10,5%
Dies erweitert die PATH-Umgebungsvariable und verwendet dann nur fünf
Zeichen ab dem elften Zeichen (Offset=10) des erweiterten Ergebnisses.





Ein Benutzer-definiertes Kommando dafür könnte folgendermaßen aussehen:

Code: Select all

[em_NewDIR_timestamp]
cmd=cmd /c md nul
Param="%%Date:~-4,4%%.%%Date:~-7,2%%.%%Date:~0,2%%"




Um diesen Ordner nun im anderen Panel anzulegen, verwende den TC-Parameter "%T"

Code: Select all

[em_NewDIR_timestamp_otherPanel]
cmd=cmd /c md nul
Param="%T\%%Date:~-4,4%%.%%Date:~-7,2%%.%%Date:~0,2%%"


Für die Zeit verwende %TIM%
C:\Users\STE Fan>echo %time%
13:11:19,86







Man kann dabei auch noch zusätzlichen Text (ohne Leerzeichen) für den Ordnernamen angeben:
Param="%T\Downlaod_%%Date:~-4,4%%.%%Date:~-7,2%%.%%Date:~0,2%%"

Manchmal muss man auch etwas experimentieren.
Um ein Leerzeichen einzufügen (und dadurch nicht plötzlich einen Ordner in jedem der beiden Panele zu erstellen)
musste ich den Parameter in doppelten Anführungszeichen setzen:
Param=""%T\Auftrag vom %%Date:~-4,4%%.%%Date:~-7,2%%.%%Date:~0,2%%""


HTH?


FAQs: TCs' Benutzer-definierte Kommandos (BDK) (em_xxxxx) UserCmd.ini
viewtopic.php?p=346779#p346779
DelphiDev
Junior Member
Junior Member
Posts: 94
Joined: 2019-03-22, 12:03 UTC

Re: Button zum Erstellen eines temp Ordners & Öffnen in neuem Tab

Post by *DelphiDev »

Man kann in TC doch in F7-Dialog rechts auf den Button neben dem Edit klicken und dort im DropDown verschiedene "Templates" auswählen? Kann ich die nicht für cm_makedir benutzen?

@Stefan2 wie könnte ich denn einen so per DOS Befehlen erzeugten Ordner auch noch in einem neuen Tab öffnen?
User avatar
Stefan2
Power Member
Power Member
Posts: 4133
Joined: 2007-09-13, 22:20 UTC
Location: Europa

Re: Button zum Erstellen eines temp Ordners & Öffnen in neuem Tab

Post by *Stefan2 »

Ach so: "& Öffnen in neuem Tab"


Dafür würde ich den Befehl aufteilen:
- wechele das Panel: cm_FocusTrg
- öffne einen neuen Tab: cm_OpenNewTab
- erstelle einen Ordner: dein "em_MdDIR" Befehl


Befehl für den Button:

cm_FocusTrg, cm_OpenNewTab,CM_WAIT 50,em_NewDIR_timestamp_otherPanel


cmd=cm_FocusTrg,CM_WAIT 50,cm_OpenNewTab,CM_WAIT 50,em_NewDIR_timestamp_otherPanel

Aber das will bei mir gerade nicht funktionieren (und ich habe zu wenig Zeit, mich jetzt damit zu befassen, sorry)



 
DelphiDev
Junior Member
Junior Member
Posts: 94
Joined: 2019-03-22, 12:03 UTC

Re: Button zum Erstellen eines temp Ordners & Öffnen in neuem Tab

Post by *DelphiDev »

Ich habe es nach einigem Hin und Her hinbekommen:

Code: Select all

[em_CreateTmpFolder]
button=
cmd=cmd /c md nul
param=""%%tmpfolder%%""
[em_SetTempFolderVar]
button=
cmd=cmd /c setx tmpfolder
param=""D:\_tmp\%%Date:~-4,4%%%%Date:~-7,2%%%%Date:~0,2%%%%time:~0,2%%%%time:~3,2%%""
[em_OpenTmpFolderInNewTab]
button=
cmd=%COMMANDER_EXE% /O /T /S /L="%tmpfolder%"
[em_CreateTmpFolderAndOpenInNewTab]
button=
cmd=em_SetTempFolderVar, CM_WAIT 50, em_CreateTmpFolder, CM_WAIT 50, cm_FocusTrg, em_OpenTmpFolderInNewTab
Wenn man nun em_CreateTmpFolderAndOpenInNewTab zB über einen Button aufruft, dann wird zunächst die Umgebungsvariable %tmpfolder% per setx permanent zB mit "d:\_tmp\20200303 850" befüllt (setx damit in einem weiteren cmd Aufruf auf die gesetzte Variable zugegriffen werden kann).
Dann wird die Variable zum Erstellen des neuen Ordners genutzt, das Target Panel wird fokussiert und schließlich wird nochmals auf die Variable zugegriffen, um den Ordner in einem neuen Tab zu öffnen.

Einziges (verschmerzbares) Manko ist, dass ganz kurz das DOS-Fenster aufgeht - kann man das irgendwie abstellen?

Herzlichen Dank an @Stefan2 und @HolgerK und @Lefteous, deren Beiträge hier im Forum mir eine große Hilfe waren.

Siehe auch: https://www.ghisler.ch/board/viewtopic.php?p=120344#p120344
User avatar
Stefan2
Power Member
Power Member
Posts: 4133
Joined: 2007-09-13, 22:20 UTC
Location: Europa

Re: Button zum Erstellen eines temp Ordners & Öffnen in neuem Tab

Post by *Stefan2 »

Schön das du eine Lösung gefunden hast!

>>> "ganz kurz das DOS-Fenster aufgeht"
Hast du mal den Haken im Button-Dialog gesetzt? [x]run minimized



- - -

Da der TC bereits zum Zeitpunkt der Ausführung des Befehls die Variablen auflöst,
ich aber alle Befehle nur im Buitton haben wollte, komme ich da nicht weiter, (auch nicht mit cmd /V:ON /c).

Daher habe ich jetzt auf Variablen verzichtet:

Code: Select all

Kommando: cmd /c
Parameter: MD ""%T%%Date:~-4,4%%-%%Date:~-7,2%%-%%Date:~0,2%%"" && %%COMMANDER_EXE%% /O /T /S /R=""%T%%Date:~-4,4%%-%%Date:~-7,2%%-%%Date:~0,2%%""
Icon: cmd
Nur kommt man damit nicht auch automatisch ins andere Panel,
nur bei der Verwendung von zB "/P=L" == Setze linkes Panel aktiv,
was ja auch nicht immer sinnvoll ist.

/O = Open > use running TC
/N = New > use always a new TC
/L = Set path in left window
/R = Set path right window
/S = Interprets /L as Source and /R as Target
/T = Opens the passed dir(s) in new tab(s).
/P= Sets the active panel at program start: /P=L left, /P=R right


Von daher ist der Weg über mehrere User-cmds bzw. eines Skriptes, wie zB AutoHotkey, zielführender.

Oder zB eine DOS-Batch und mithilfe von NirSoft nircmd.exe:

Code: Select all

@ECHO OFF

REM     Button zum Erstellen eines temp Ordners & Öffnen in neuem Tab
REM     https://ghisler.ch/board/viewtopic.php?f=2&t=57979
REM     2020-03-03 Tue 11:00

REM     TC Button:
REM         Kommand: "path to\the\script.cmd"
REM         Params : "%T"


REM   Get target path from the button parameter %T
SET Targ=%~1

SET Targ=%Targ%\%Date:~-4,4%-%Date:~-7,2%-%Date:~0,2%
rem SET Targ=%Targ%\Downloaded am %Date:~-4,4%-%Date:~-7,2%-%Date:~0,2%
rem SET Targ=%Targ%\%Date:~-4,4%-%Date:~-7,2%-%Date:~0,2% neue Liste erhalten

MD "%Targ%"
%COMMANDER_EXE% /O /T /S /R="%Targ%"

REM   Switch panels:
SET nirc=%Commander_Path%\TOOLs\NirSoft\nircmdc.exe
REM   TOTALCMD.INC:  cm_FocusTrg=4006;Focus on target file list
%nirc% win sendmsg class TTOTAL_CMD 1075, 4006, 0



- - -

AutoHotkey Skript:

Code: Select all

;// Button zum Erstellen eines temp Ordners & Öffnen in neuem Tab
;// https://ghisler.ch/board/viewtopic.php?f=2&t=57979
;//Stefan 2020-03-03 Tue 12:00

;TC Button
;Command: "Path to\AHK\AutoHotkey.exe"
;Parameters: "Path to\this\script.ahk"



;// USER SETTING
NewFld = Auftrag vom %A_Year%-%A_MM%-%A_DD% %A_Hour%%A_Min% todo 


;// THE CODE
SendMessage 1075, 4006, 0, , ahk_class TTOTAL_CMD
SendMessage 1074, 1000, 0, , ahk_class TTOTAL_CMD
If(ErrorLevel=1)
	ActivePath=9   ;leftpath
Else
	ActivePath=10   ;rightpath
SendMessage 1074, %ActivePath%, 0, , ahk_class TTOTAL_CMD
ControlGetText, ActivePath, , ahk_id %ErrorLevel%
StringReplace, ActivePath, ActivePath,*.*, 
FileCreateDir, %ActivePath%%NewFld%
EnvGet, CommExe, Commander_Exe
Run, %CommExe% /O /T /S /L="%ActivePath%%NewFld%"
;THE END






 
DelphiDev
Junior Member
Junior Member
Posts: 94
Joined: 2019-03-22, 12:03 UTC

Re: Button zum Erstellen eines temp Ordners & Öffnen in neuem Tab

Post by *DelphiDev »

Stefan2 wrote: 2020-03-03, 10:00 UTC Schön das du eine Lösung gefunden hast!

>>> "ganz kurz das DOS-Fenster aufgeht"
Hast du mal den Haken im Button-Dialog gesetzt? [x]run minimized
Da ich im Button ja das User Command em_CreateTmpFolderAndOpenInNewTab aufrufe, sind die Checkboxen für Run maximized / minimized ausgegraut bzw deaktiviert. Kann ich aber mit leben.
User avatar
Stefan2
Power Member
Power Member
Posts: 4133
Joined: 2007-09-13, 22:20 UTC
Location: Europa

Re: Button zum Erstellen eines temp Ordners & Öffnen in neuem Tab

Post by *Stefan2 »

DelphiDev wrote: 2020-03-03, 10:22 UTC
Stefan2 wrote: 2020-03-03, 10:00 UTC Schön das du eine Lösung gefunden hast!

>>> "ganz kurz das DOS-Fenster aufgeht"
Hast du mal den Haken im Button-Dialog gesetzt? [x]run minimized
Da ich im Button ja das User Command em_CreateTmpFolderAndOpenInNewTab aufrufe, sind die Checkboxen für Run maximized / minimized ausgegraut bzw deaktiviert. Kann ich aber mit leben.


:roll: Auch wieder war :D



Versuche es mal mit einer zusätzlichen Zeile "iconic=1" bei deinem User Command





iconic=1 : Programmfenster minimiert, -oder-
iconic=0 : Programmfenster maximiert ausführen


Code: Select all

[em_CreateTmpFolder]
cmd=cmd /c md nul
param=""%%tmpfolder%%""
iconic=1




Zum weiter lesen:
FAQs: TCs' Benutzer-definierte Kommandos (BDK) (em_xxxxx) UserCmd.ini
viewtopic.php?p=346779#p346779

FAQs: Button-code kopieren einfügen (TOTALCMD#BAR#DATA)
viewtopic.php?p=335758#p335758



 
DelphiDev
Junior Member
Junior Member
Posts: 94
Joined: 2019-03-22, 12:03 UTC

Re: Button zum Erstellen eines temp Ordners & Öffnen in neuem Tab

Post by *DelphiDev »

Habe "iconic=1" nun bei beiden User Commands die cmd aufrufen (md und setx) ergänzt und nun ist das DOS Fenster nicht mehr zu sehen.
Vielen Dank, Stefan! Du machst einen tollen Job hier im Forum!
Post Reply