Supportnet Computer
Planet of Tech

Supportnet / Forum / BS-Sonstige

Batchdatei zum Kopieren in Unterordner





Frage

Hallo zusammen, ich möchte gerne eine Batchdatei erstellen, die mir eine Datei (HEADER.htm) in alle Unterverzeichnisse des Verzeichnisses kopiert, in dem sie sich selber befindet. Nun ist mir das Kopieren als solches klar: copy "HEADER.htm" " ..... " Was aber ist in meinem Fall " ..... " ? Wäre nett, wenn mir da jemand helfen kann. Viele Grüße guethi

Antwort 1 von Rodi

Hi.
Ob das mit Batch Dateien geht bin ich mir nicht sicher. Ich denke aber schon. Leichter geht es mit Scriptsprachen. Ich habe selber mal einen Suchalgorithmus für die Registry programmiert, um einen Eintrag zu finden und zu ersetzen. Da war ich gleich mal 3 Tage beschäftigt. Das Vorgehen dürfte aber das Gleiche sein.
Als Sprache habe ich AutoIt 3 verwendet.
http://www.autoitscript.com
Ich hoffe es hilft weiter.
Gruss @all,
Dirk


Hier mal der Quellcode:

$ret = RegSearch("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\Root",1)

Exit

Func RegSearch($regkey,$index)
	While 1
		Local $var = RegEnumKey($regkey, $index)
		$index = $index + 1
		If @error = -1 Then
			$ret = ReadValues($regkey,1)
			Return 1
		ElseIf $var = "" Then
			$ret = ReadValues($regkey,1)
			Return -1

		ElseIf StringLen($var) > 1 Then
			$ret = RegSearch($regkey & "\" & $var, 1)
		EndIf
	WEnd
	Return $var
EndFunc

Func ReadValues($regkey,$index)
	While 1
		Local $var = RegEnumVal($regkey, $index)
		$index = $index + 1
		If $var = 1 Then
			Return -1
		ElseIf $var = -1 Then
			Return $var
		ElseIf $var = "" Then
			Return -1
		EndIf
		If $var = "DosDeviceName" Then
			FuncCheckValue($regkey)
		EndIf
		
	WEnd
	Return $var
EndFunc	

Func FuncCheckValue($regkey)
	Local $var = RegRead($regkey,"DosDeviceName")
	If $var = "COM1" Then
		writeval($regkey)
	EndIf
EndFunc

Func writeval($regkey)
	Local $val = RegRead($regkey, "ForceFifoEnable")
	If @error Then
		$ret = RegWrite($regkey,"ForceFifoEnable","REG_DWORD",0)
		MsgBox(262144,"FiFo Enabler","FiFo was switched off.")
	ElseIf $val = 1 Then
		$ret = RegWrite($regkey,"ForceFifoEnable","REG_DWORD",0)
		MsgBox(262144,"FiFo Enabler","FiFo was switched off.")
	Else
		$ret = RegWrite($regkey,"ForceFifoEnable","REG_DWORD",1)
		MsgBox(262144,"FiFo Enabler","FiFo was switched on.")
	EndIf

EndFunc


Antwort 2 von guethi

Hallo Dirk,

das sieht mir doch recht kompliziert aus, dennoch vielen Dank. Ich habe mittlerweile etwas gefunden:

for /D %%F in (*) do @echo copy HEADER.htm %%F

Da mir die ganze Batch-Geschichte nicht ganz klar ist, kann ich dieses Schnipsel aber leider nicht anpassen. Ideen dazu?

Viele Grüße

guethi

Antwort 3 von manei

Hallo,

wenn Du die Batch im Hauptverzeichnis dieser Unterverzeichnisse liegen hast, müßte das gehen:

for /D /r %%F in (*.*) do copy HEADER.htm %%F

ansonsten in die Klammer das Hauptverzeichnis reinschreiben mit

Laufwerk:\Verzeichnispfad\*.*

MfG maneich

Antwort 4 von guethi

Hallo maneich,

klappt leider auch nicht. Mache ich grundlegend etwas falsch?

Ich habe in der bat nichts drin stehen außer dieser Zeile, ist das ok so? Müsste HEADER.htm vielleicht in Anführungszeichen stehen?

Viele Grüße

guethi

Antwort 5 von Arno_Nym

Zitat:
klappt leider auch nicht.

Könntest du vielleicht etwas genauer werden? Die angezeigte Fehlermeldung wäre z.B. hilfreich.
Zitat:
Mache ich grundlegend etwas falsch?

Nö. Der Befehl von maneich ist im Prinzip richtig.
Zitat:
Müsste HEADER.htm vielleicht in Anführungszeichen stehen?

Nö. Aber falls deine Unterverzeichnisse Leerzeichen enthalten, dann muß das zweite "%%F" (also am Ende der Zeile) in Anf.zeichen stehen.

Arno

Antwort 6 von Solo

Hi, kannst es mal so versuchen:

@echo off

for /D /r %%F in ( Laufwerk:\Verzeichnispfad\ ) do copy HEADER.htm %%F

Antwort 7 von Arno_Nym

@Solo
Schuß ins Blaue, oder?

Arno

Antwort 8 von guethi

Mal an alle:

Vielen Dank! :-)

Besonders an maneich und Arno_Nym. Der Code klappt, es lag, wie von Arno_Nym vermutet an den Leerzeichen.Die Anführungszeichen haben das Problem behoben.

Fehlermeldung gab es übrigens zuvor keine, es geschah einfach nichts.

Arno_Nym, hast Du zufällig einen Link oder ein Tut, dass ein wenig in die Batch-Geschichten einführt? Ich habe noch nichts gefunden, dass mich überzeugt.

Nochmals vielen Dank an alle, die sich Gedanken gemacht haben.

Beste Grüße


guethi

Antwort 9 von Solo

Antwort 10 von guethi

Danke auch dafür! :-)

Beste Grüße


guethi