30407
Goto Top

Suche in Batch

Hi,

ich würde gerne ein Batchprogramm schreiben,
1. ....dass nach einem bestimmten Ordner sucht.
2. Wenn dieser Ordner vorhanden ist sich selbst als Kopie darin ablegt.

Ist das in einer Batch möglich ?

Content-Key: 33121

Url: https://administrator.de/contentid/33121

Ausgedruckt am: 28.03.2024 um 15:03 Uhr

Mitglied: n.beetz
n.beetz 23.05.2006 um 22:33:34 Uhr
Goto Top
Hallo,

na willst Du einen kleinen Virus schreiben? face-smile

Muss es denn eine Batch sein oder gehen auch WScript?

Gruß

Norbert
Mitglied: Biber
Biber 24.05.2006 um 09:26:01 Uhr
Goto Top
Moin,
vielleicht geht es mit WScript schneller, aber als Batch lässt es sich schneller Formulieren....

...
for /R d:\ %%i in (.) do @if /i [%%~ni]==[GesuchtesDir] @ECHO copy %%~dpnx0 %%~dpni

Der Parameter nach dem "for /R" kann ein bestimmtes Laufwerk "C:\" , "E:\"... oder halt das aktuelle ("\") sein.
Das @echo ist nur zum Testen - Zum Scharfmachen das "@ECHO" löschen.
Test am CMD-Prompt:
(= 9:25:01  D:\temp=)
>for /R d:\ %i in (.) do @if /i [%~ni]==[backup1] @echo copy mein.bat %~dpni
copy mein.bat d:\temp\Backup1

Hope That Helps
Biber
Mitglied: 30407
30407 24.05.2006 um 11:32:13 Uhr
Goto Top
Hi

bei dem Code:

for /R d:\ %%i in (.) do @if /i [%%~ni]==[GesuchtesDir] copy %%~dpnx0 %%~dpni


muss ich doch nur "GesuchtesDir" durch den Namen der Datei ersetzen (z.B. test), oder ?
Jedoch kam bei immer Fehlermeldungen, das das System das Verzeichnis nicht finden kann !
Woran liegt das ?
Mitglied: Biber
Biber 24.05.2006 um 11:57:31 Uhr
Goto Top
Uups, sorry,

diesmal hatte ich ein Prozentzeichen zuviel in der Batch-Variante:

also bitte ein schlichtes %~dpnx0 statt %%~dpnx0
for /R d:\ %%i in (.) do @if /i [%%~ni]==[GesuchtesDir] copy %~dpnx0 %%~dpni

(Kommt vom Posten ungetesteter Schnipsel....ich wollte es mir eigentlich abgewöhnen.
so wie das Rauchen und das Fluchen...*grmbl*)

Gruß
Biber
Mitglied: 30407
30407 24.05.2006 um 12:57:58 Uhr
Goto Top
Hi,
sry aber der neue Code:

for /R d:\ %%i in (.) do @if /i [%%~ni]==[test²] copy %~dpnx0 %%~dpni


funktioniert auch nicht. Neue Fehlermeldung : Syntaxfehler.

² für den Ordner test

Gruss Inkognitar
Mitglied: Biber
Biber 24.05.2006 um 13:06:06 Uhr
Goto Top
Merkwürdig...hier mein Test:
(=13:04:29  E:\=)
>type f:\Administrator\Inkognitar.bat
@for /R d:\ %%i in (.) do @if /i [%%~ni]==[backup1] ECHO copy %~dpnx0 %%~dpni

(=13:04:51  E:\=)
>f:\Administrator\Inkognitar.bat
copy f:\Administrator\Inkognitar.bat d:\temp\Backup1

???
Biber
[Edit] Aaaaaaaaaber: Wenn der Zielordner fürs Copy "c:\Dokumente und Einstellungen\..." heißt, dann gibts Syntaxfehler.
@for /R d:\ %%i in (.) do @if /i [%%~ni]==[backup1] ECHO copy %~dpnx0 "%%~dpni"  

-->Zielpfad in Anführungszeichen setzen wegen Leerzeichen.
[/Edit]
Mitglied: 30407
30407 24.05.2006 um 13:27:56 Uhr
Goto Top
Hi,

also eigentlich heisst, der Pfad C:\Test --> keine Anführungszeichen nötig.
Außerdem bin ich jetz ganz durch einander : Brauch man nun ein "@" Symbol vor "For" oder nicht ? Auch dachte ich, ich sollte @echo löschen. ?!
Also habe ich folgendes ausprobiert:

@echo off
@for /R c:\ %%i in (.) do @if /i [%%~ni]==[test] echo copy %~dpnx0 %%~dpni


In der Konsole erchien dann:

copy C:\Dokumente und Einstellungen\Besitzer\Desktop\suche.bat c:\Dokumente und Einstellungen\Besitzer\Eigene Dateien\ChessBase\Test
copy C:\Dokumente und Einstellungen\Besitzer\Desktop\suche.bat c:\MeineProjekte\test
copy C:\Dokumente und Einstellungen\Besitzer\Desktop\suche.bat c:\Programme\Techland\Chrome\JavaChromeGame\NetModule\Objects\Test
copy C:\Dokumente und Einstellungen\Besitzer\Desktop\suche.bat c:\Programme\Techland\Chrome\JavaChromeGameNet\NetModule\Objects\Test
copy C:\Dokumente und Einstellungen\Besitzer\Desktop\suche.bat c:\Programme\Valve\Steam\SteamApps\SourceMods\Halloween\materials\models\test
copy C:\Dokumente und Einstellungen\Besitzer\Desktop\suche.bat c:\Programme\Valve\Steam\SteamApps\SourceMods\Halloween\models\test
copy C:\Dokumente und Einstellungen\Besitzer\Desktop\suche.bat c:\Programme\Valve\Steam\SteamApps\SourceMods\metastasis\materials\test
copy C:\Dokumente und Einstellungen\Besitzer\Desktop\suche.bat c:\test

Jedoch fand ich in keinem, suche.bat ! Woran liegt das ?

Edit: Mit "%%~dpni" hat es auch nicht funktioniert.
Mitglied: Biber
Biber 24.05.2006 um 13:59:22 Uhr
Goto Top
Na, Inkognitar,
verwirren wollte ich Dich nicht, also:

a) Das "@" vor einem CMD-Befehl unterdrückt nur dessen ECHO-Anzeige.
Wenn Du also eine @for..in..do-anweisung abschickst vom CMD-Prompt aus, wird die Anweisung selbst NICHT noch mal angezeigt.

Teste mal am CMD-Prompt
for %i in (1,2,3) do echo %i
-und-
for %i in (1,2,3) do @echo %i

..dann siehst Du den Unterschied.

b) Der von mir gepostete Schnipsel macht ja auch kein "copy ..von...nach..", sondern nur eine Simulation "ECHO copy ..von...nach.."
Lösche dieses Wort ECHO, dann funktioniert es.

Gruß
Biber
Mitglied: 30407
30407 24.05.2006 um 15:21:33 Uhr
Goto Top
Hi,

sry aber wenn ich aus dem Code:

@echo off
@for /R c:\ %%i in (.) do @if /i [%%~ni]==[test] echo copy %~dpnx0 %%~dpni


das echo weglösche:

@echo off
@for /R c:\ %%i in (.) do @if /i [%%~ni]==[test] copy %~dpnx0 %%~dpni


kommt wieder die fehlermeldung: Syntaxfehler.
cmdausgabe:

Syntaxfehler.
Syntaxfehler.
Syntaxfehler.
Syntaxfehler.
Syntaxfehler.
Syntaxfehler.
Syntaxfehler.
Syntaxfehler.

gruss Inkognitar
Mitglied: Biber
Biber 24.05.2006 um 15:42:29 Uhr
Goto Top
Siehe oben: numm den letzten von mir in einem Kästchen stehenden Oneliner.
Den, wo der Copy-Zielparameter in Hochkommata steht:
@echo off
for /R c:\ %%i in (.) do @if /i [%%~ni]==[test] copy %~dpnx0 "%%~dpni"  

Der Syntaxfehler kommt von Zielverzeichnissen mit Leerzeichen im Verzeichnisnamen.
Ehrlich

Biber
Mitglied: 30407
30407 24.05.2006 um 16:24:15 Uhr
Goto Top
Hi,

ich habe es nochmal mit den Anführungszeichen probiert:

@echo off
for /R c:\ %%i in (.) do @if /i [%%~ni]==[test] copy %~dpnx0 "%%~dpni"


jedoch kam wieder die Syntaxfehlermeldung. Kann es sein das "C:\Dokumente und Einstellungen\Besitzer\..." falsch ist, sondern C:\Dokumente" "und" "Einstellungen\Besitzer lauten müsste und daher der Compiler es nicht versteht ? Jedoch müsste er dann eigentlich bei C:\test keine Probleme haben, aber genau da hat er auch den Syntaxfehler gemeldet.

Edit: Es muss an "Dokumente und Einstellungen" liegen, das er die bei C:\test nicht funktioniert liegt, woll daran das sich suche.bat auf dem Desktop befindet und damit im Verzeichnis C:\Dokumente und Einstellungen\Besitzer\Desktop ist. ==> Pfad von suche.bat muss auch in "".

Edit2: Ich habe es geschafft ! Vollständige Lsg:
@echo off
for /R c:\ %%i in (.) do @if /i [%%~ni]==[test] copy "%~dpnx0" "%%~dpni"

Edit3: Ich hätte noch eine Frage: Kann ich die batch datei in dem gefunden verzeichnis unter einem anderen Namen abspeichern und unter verschiedenen Namen im gefundenen Verzeichnis mehrmals speichern ?
Mitglied: Biber
Biber 24.05.2006 um 18:04:35 Uhr
Goto Top
face-wink
Dass die *.bat-Datei selbst auf dem Desktop liegen könnte...darauf bin ich natürlich auch nicht gekommen. Aber dann wären -wie Du auch selbst geschrieben hast- die Anführungszeichen der richtige Weg.

Wenn Die Bat-Datei einen neuen Namen bekommen soll, dann:
::----------snipp Inkognitar.bat
for /R c:\ %%i in (.) do @if /i [%%~ni]==[whatever] ECHO copy "%~dpnx0" "%%~dpni\NeuerBatName.bat"  
:: --------snapp Inkognitar.bat
-->löst auf zu:
copy "c:\Dokumente und Einstellungen\Administrator\Desktop\Inkognitar.bat"  "c:\Im abgelegenen Verzeichnis\whatever\NeuerBatName.bat"  
Gruß und schönes Wochenende
Biber