F7-History im INI schützen

German support forum

Moderators: white, Hacker, Stefan2

User avatar
HolgerK
Power Member
Power Member
Posts: 5406
Joined: 2006-01-26, 22:15 UTC
Location: Europe, Aachen

Post by *HolgerK »

Peter wrote:b) Wo kann ich zu "TOTALCMD#BAR#DATA" nachlesen? Ich kann zwar die Buttonbar über Dialog und über BAR-File ändern, aber die Codeanwendung ist mir fremd.
Das ist der Inhalt des Clipboards, wenn du auf einem Button das Kontextmenu öffnest und "Kopieren" auswählst.

Umgekehrt kann man auch den Text im Code-Block markieren, kopieren, und dann im Kontextmenu der Buttonbar "Einfügen" ausführen.

Simple Methode um Buttons nicht aus dem Forum abschreiben zu müssen. ;)
a) ist es möglich, dass statt "xx" der Anwender nach einem String gefragt wird und dann dieser String verwendet wird:
Eingabe: "hallo"
Ergebnis: hallo-100, hallo-105, ...
Tja, dann kommen wir mal zu den Komfortfunktionen :wink:

CreateFolders.vbs:

Code: Select all

'TotalCommander Button um Verzeichnisse anzulegen 
'Kommando  : <Pfad>\CreateFolders.vbs 
'Parameter : Template.dir "%P"
'Startpfad : <Pfad>\ 
'Icondatei : WScript.exe
'Tooltip   : Erzeuge Template Verzeichnisse
'Die Vorlagendatei "Template.dir" muss im Verzeichnis "<Pfad>" liegen
' 
Const FOR_READING = 1
Set WshShell = WScript.CreateObject("WScript.Shell" )
Set oArgs = WScript.Arguments
If WScript.arguments.Count > 1 Then

    sDirList = oArgs.Item(0)
    sDestPath = oArgs.Item(1)
    sPrefix = InputBox ("Bitte einen Prefix für die neuen Verzeichnisse angeben"_
                       ,"CreateFolders.vbs"_
                       ,"xxxxxx"_
                       ) 
    If sPrefix = vbNullString  Then WScript.Quit (1)

    Set oFSO = CreateObject("Scripting.FileSystemObject")

    If  oFSO.FileExists(sDirlist) Then

        Set oTextStream = oFSO.OpenTextFile(sDirList,FOR_READING)

        Do Until oTextStream.AtEndOfStream

            sLine = oTextStream.ReadLine
            sfolder = sDestpath & "" & sPrefix & sLine 
            If Not oFSO.FolderExists(sfolder) Then
                oFSO.CreateFolder(sfolder)
            End If

        Loop

        oTextStream.Close

	Else

    	WScript.Echo "Input file " & sDirlist & " nicht gefunden."

    End If

else

    WScript.Echo  "Fehlende Parameter"

End If
Button:

Code: Select all

TOTALCMD#BAR#DATA
%COMMANDER_PATH%\Scripts\CreateFolders.vbs
Template.dir  "%P"
WScript.exe
Erzeuge Template  Verzeichnisse
%COMMANDER_PATH%\Scripts\

-1
und beispielhaft die Template.dir-Datei:

Code: Select all

-100
-101
-102
-200
-201
-205
-300
HTH
Holger
User avatar
Peter
Power Member
Power Member
Posts: 2064
Joined: 2003-11-13, 13:40 UTC
Location: Schweiz

Post by *Peter »

Vielen Dank fürs erste. Ich kann aber erst in einigen Tagen testen und berichten - sicherlich positiv.

Peter
TC 10.xx / #266191
Win 10 x64
User avatar
Peter
Power Member
Power Member
Posts: 2064
Joined: 2003-11-13, 13:40 UTC
Location: Schweiz

Post by *Peter »

Peter wrote:.... Ich kann aber erst in einigen Tagen testen und berichten ...
Alles bestens - vielen Dank.

Peter
TC 10.xx / #266191
Win 10 x64
User avatar
Peter
Power Member
Power Member
Posts: 2064
Joined: 2003-11-13, 13:40 UTC
Location: Schweiz

Post by *Peter »

HolgerK wrote:
a) ist es möglich, dass statt "xx" der Anwender nach einem String gefragt wird und dann dieser String verwendet wird:
Eingabe: "hallo"
Ergebnis: hallo-100, hallo-105, ...
und beispielhaft die Template.dir-Datei:

Code: Select all

-100
-101
-102
-200
-201
-205
-300
Guten Abend Holger

ich muss schon wieder betteln gehen :oops: :oops:

Es geht ja darum, aus Fixtexten (z.B. Nummerndatei) und variablen Texten (z.B. "hallo") Unterverzeichnisse zu erzeugen:

Code: Select all

hallo-101
hallo-102
hallo-200
hallo-201
hallo-205
Es geht auch mit Unterverzeichnissen

Code: Select all

hallo-101
hallo-102
hallo-200
hallo-201
hallo-205/klein
hallo-205/gross
Soweit alles klar - aber jetzt kommt die Zugabe: Wie kann man auch die Variable in Unterzeichnisse bekommen?

Code: Select all

hallo-101
hallo-102
hallo-200
hallo-201
hallo-205/hallo-klein
hallo-205/hallo-gross
Im Code oder im template oder in beidem?

Ich bedanke mich für weitere Unterstützung.

Peter
TC 10.xx / #266191
Win 10 x64
User avatar
Peter
Power Member
Power Member
Posts: 2064
Joined: 2003-11-13, 13:40 UTC
Location: Schweiz

Post by *Peter »

Peter wrote:...Im Code oder im template oder in beidem?...
Im Code gibt es die Zeile

Code: Select all

sfolder = sDestpath & "" & sPrefix & sLine 
Wenn man nun das so umbaut, dass im Template ein Platzhalter steht und der dann durch die Variable (Prefix) ersetzt wird ...

Template:

Code: Select all

&-101
&-102
&-103\&-gross
&-103\&-klein
Muster-&
Script

Code: Select all

- Lies die Zeile
- ersetze & durch Variable Prefix
- mache einen Ordner draus
Klappt das?

Peter
TC 10.xx / #266191
Win 10 x64
User avatar
HolgerK
Power Member
Power Member
Posts: 5406
Joined: 2006-01-26, 22:15 UTC
Location: Europe, Aachen

Post by *HolgerK »

Peter wrote:Guten Abend Holger

ich muss schon wieder betteln gehen...
Kein Problem. ;)

CreateFolders2.vbs:

Code: Select all

''TotalCommander Button um Verzeichnisse anzulegen 
'Kommando  : <Pfad>\CreateFolders2.vbs 
'Parameter : Template.dir "%P"
'StartPfad : <Pfad>\ 
'Icondatei : WScript.exe
'Tooltip   : Erzeuge Template Verzeichnisse
'Die Vorlagendatei "Template.dir" muss im Verzeichnis "<Pfad>" liegen
' das Platzhalter Zeichen "*" wird durch die abgefragte Zeichenkette ersetzt
' 
const sPlaceHolder = "*"
Const FOR_READING = 1
Set oArgs = WScript.Arguments
Dim oFSO
If WScript.arguments.Count > 1 Then

	sDirList = oArgs.Item(0)
	sDestPath = oArgs.Item(1)
	sPrefix = InputBox ("Bitte die Zeichenkette angeben, die das Platzhalterzeichen<*> ersetzen soll"_
					   ,"CreateFolders.vbs"_
					   ,"xxxxxx"_
					   ) 
	If sPrefix = vbNullString  Then WScript.Quit (1)
	Set oFSO = CreateObject("Scripting.FileSystemObject")

	If  oFSO.FileExists(sDirlist) Then

		Set oTextStream = oFSO.OpenTextFile(sDirList,FOR_READING)

		Do Until oTextStream.AtEndOfStream

			sLine = oTextStream.ReadLine
			sLine = Replace(sline,sPlaceholder,sPrefix)
			if Not CreateFolders(sDestpath & "" & sLine) then exit do
			
		Loop

		oTextStream.Close

	Else

		WScript.Echo "Input file " & sDirlist & " nicht gefunden."

	End If

else

	WScript.Echo  "Fehlende Parameter"

End If

Function CreateFolders(sPath)

	CreateFolders = True
	sParentPath = oFSO.GetParentFolderName(sPath)

	If Not oFSO.FolderExists(sParentPath) Then

		CreateFolders = CreateFolders(sParentPath)

	end if

	If CreateFolders Then

		On Error Resume Next
		oFSO.CreateFolder(sPath)

		If Not Err.Number = 0 And Not Err.Number = 58 Then

			WScript.Echo "Fehler: " & Err.Number &" "& Err.Description & VbCrLf & VbCrLf &_
						"Der Pfad" & VbCrLf & VbCrLf &_
						sPath & VbCrLf & VbCrLf &_
						"konnte nicht angelegt werden."
			CreateFolders = False

		End If

	End If

End Function
Ich habe mir die Freiheit genommen, das Platzhalterzeichen & durch * zu ersetzten, da & ein gültiges Zeichen in Pfadnamen ist.
Übergabeparameter usw. sind die Gleichen geblieben.

Gruß
Holger

Edit: ausführlichere Fehlermeldung und Problem bei bereits existierenden Pfad behoben
Last edited by HolgerK on 2010-07-01, 21:45 UTC, edited 1 time in total.
User avatar
Peter
Power Member
Power Member
Posts: 2064
Joined: 2003-11-13, 13:40 UTC
Location: Schweiz

Post by *Peter »

Wunderbar, klappt bestens. Vielen Dank. :idea: :idea:

Kann man im Script noch abschliessend ein "Refresh" des Panels einbauen? Die Schnelligkeit des Scripts überholt die Panelanzeige ...

Peter
TC 10.xx / #266191
Win 10 x64
User avatar
HolgerK
Power Member
Power Member
Posts: 5406
Joined: 2006-01-26, 22:15 UTC
Location: Europe, Aachen

Post by *HolgerK »

Sollte doch eigentlich mit der Refreshfunktion des TC funktionieren?

Falls da trotzdem Probleme existieren:

Hinter

Code: Select all

		oTextStream.Close
die beiden folgenden Zeilen einfügen:

Code: Select all

		Set WshShell = WScript.CreateObject( "WScript.Shell" ) 
		WshShell.SendKeys "^r"
Natürlich darfst du dann <Ctrl+R> nicht auf ein anderes Kommando umgelegt haben.

Gruß
Holger

Edit: Ich habe den Script noch mal angepasst; da war noch ein kleineres Problem wenn Verzeichnisse bereits existierten.
User avatar
Peter
Power Member
Power Member
Posts: 2064
Joined: 2003-11-13, 13:40 UTC
Location: Schweiz

Post by *Peter »

HolgerK wrote:Sollte doch eigentlich mit der Refreshfunktion des TC funktionieren?...
Ja, natürlich klappt das. Hier geht es aber um eine reine Komfortfunktion.

Nochmals herzlichen Dank, Holger.

Peter
TC 10.xx / #266191
Win 10 x64
User avatar
Peter
Power Member
Power Member
Posts: 2064
Joined: 2003-11-13, 13:40 UTC
Location: Schweiz

Post by *Peter »

Neuer Rechner - neues Problem....

Ich habe eigentlich..

- alles vom alten auf den neuen PC übertragen
- WSCRIPT in der Registry auf "Enabled" gesetzt
- VBS mit Wscript verknüpft
- diverse andere Scripts gestartet
- BAR-Daten von alt auf neu kopiert
- test.vbs mit dem folgende Inhalt erfolgreich doppelgeklickt

Code: Select all

' WSH-Test-Skript (VBS)
WScript.Echo "Dies ist der " & WScript.Name & _
" Version " & WScript.Version
Ergebnis: Version 5.7

Und nach gestrigen Startproblemen ("unbekanntes dies und das" aus dem System) bin ich nach den obigen Anpassungen weiter - ich lande schon bei "Fehlende Parameter" aus dem VBS.

Was zum Kuckuck noch mal hängt denn diesmal?

Grüsse

Peter
TC 10.xx / #266191
Win 10 x64
User avatar
HolgerK
Power Member
Power Member
Posts: 5406
Joined: 2006-01-26, 22:15 UTC
Location: Europe, Aachen

Post by *HolgerK »

- VBS mit Wscript verknüpft
Schau mal in der Registry unter
[HKEY_CLASSES_ROOT\VBSFile\Shell\Open\Command]
(oder [HKEY_CLASSES_ROOT\.VBS\Shell\Open\Command])
nach.
Dort sollte ein sich (default) REGEXPAND_SZ Schlüssel mit folgendem inhalt:

Code: Select all

"%SystemRoot%\System32\WScript.exe" "%1" %*
befinden.
Ich vermute der Teil %* (alle weiteren Parameter ebenfalls übergeben) fehlt bei dir.

Gruß
Holger
User avatar
Peter
Power Member
Power Member
Posts: 2064
Joined: 2003-11-13, 13:40 UTC
Location: Schweiz

Post by *Peter »

HolgerK wrote:Schau mal in der Registry unter
[HKEY_CLASSES_ROOT\VBSFile\Shell\Open\Command]
(oder [HKEY_CLASSES_ROOT\.VBS\Shell\Open\Command])
nach.
Bei mir steht es unter VBSFILE, nicht unter VBS. Unter da steht

Code: Select all

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\VBSFile\Shell\open\command]
@=""%SystemRoot%\\System32\\WScript.exe" "%1" %*"
Vorher ohne Hochkomma am Pfad , nachher mit Hochkomma - beides hilft nicht. Und mein Button sieht so aus (auf altem und neuem PC gleich):

Code: Select all

TOTALCMD#BAR#DATA
%commander_path%\Plugins\Inhalt_WDX\script\verzeichnisse.vbs
"d:\Program Files\totalcmd\Plugins\Inhalt_WDX\script\verzeichnisse.txt" "%P"
D:\Program Files\totalcmd\TOTALCMD.EXE,33
Erzeugt die Verzeichnisstruktur von Anlagen.

0
-1
Peter
TC 10.xx / #266191
Win 10 x64
User avatar
Peter
Power Member
Power Member
Posts: 2064
Joined: 2003-11-13, 13:40 UTC
Location: Schweiz

Post by *Peter »

Jetzt habe ich das Kleingedruckte gelesen:
HolgerK wrote:... REGEXPAND_SZ...
dann die REG umgebaut:

Code: Select all

[HKEY_CLASSES_ROOT\VBSFile\Shell\open\command]
@=hex(2):22,00,25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,00,6f,00,74,\
00,25,00,5c,00,53,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,57,00,\
53,00,63,00,72,00,69,00,70,00,74,00,2e,00,65,00,78,00,65,00,22,00,20,00,22,\
00,25,00,31,00,22,00,20,00,25,00,2a,00,00,00
Und noch immer nichts ...

Peter
TC 10.xx / #266191
Win 10 x64
User avatar
HolgerK
Power Member
Power Member
Posts: 5406
Joined: 2006-01-26, 22:15 UTC
Location: Europe, Aachen

Post by *HolgerK »

Was steht unter:

Code: Select all

HKEY_CLASSES_ROOT\.vbs
default REG_SZ VBSFile
?
Plus irgendein Unterschlüssel "PersistentHandler" ..mit magischer Zahlenfolge?
Wenn dort nicht auf VBSFile verwiesen wird, dann hast du die falsche Stelle geändert.
Ansonsten mal nachsehen ob es einen Schlüssel mit

Code: Select all

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.vbs\OpenWithList
gibt.
In dem Fall wurde die vbs-Verknüpfung mittels Kontextmenu "Öffnen mit" angelegt.
Probeweise den Schlüssel von "FileExts\.vbs\" "nach FileExts\.NOvbs\" umbenennen und prüfen ob es dann funktioniert.

BTW:
alles vom alten auf den neuen PC übertragen
Welches Betriebsystem?

Gruß
Holger
User avatar
Peter
Power Member
Power Member
Posts: 2064
Joined: 2003-11-13, 13:40 UTC
Location: Schweiz

Post by *Peter »

HolgerK wrote:Was steht unter:

Code: Select all

HKEY_CLASSES_ROOT\.vbs
default REG_SZ VBSFile
Da steht:

Code: Select all

Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\VBS]
@="VB Script Language"
[HKEY_CLASSES_ROOT\VBS\CLSID]
@="{B54F3741-5B07-11cf-A4B0-00AA004A55E8}"
[HKEY_CLASSES_ROOT\VBS\OLEScript]
HolgerK wrote:...Ansonsten mal nachsehen ob es einen Schlüssel mit

Code: Select all

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.vbs\OpenWithList
gibt....

Ja:

Code: Select all

Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.vbs]
"Application"="wscript.exe"
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.vbs\OpenWithList]
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.vbs\OpenWithProgids]
"VBSFile"=hex(0):
HolgerK wrote:...
Probeweise den Schlüssel von "FileExts\.vbs" "nach FileExts\.NOvbs" umbenennen und prüfen ob es dann funktioniert....
Ja - es funktioniert. Und warum :shock: :shock: :shock:
Jetzt so belassen, vermute ich.
HolgerK wrote:...BTW:
alles vom alten auf den neuen PC übertragen
Welches Betriebsystem?...
Beide XP Prof.

Und die Moral aus der Geschicht' - traue den Verknüpfungen nicht.

Oder - siehe oben - was war das?

Peter
TC 10.xx / #266191
Win 10 x64
Post Reply