Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

String mit String vergleichen

Frage Entwicklung Batch & Shell

Mitglied: Tanolde

Tanolde (Level 1) - Jetzt verbinden

13.08.2008, aktualisiert 14.08.2008, 7575 Aufrufe, 4 Kommentare

per batch

Hi,

ich arbeite momentan an einer kleinen Batch (absoluter Newbie), die folgendes bewerkstelligen soll - die Suchfunktionen hier haben zwar einiges zu Tage gebracht, aber fähig, es auf mein Problem zu projizieren, war ich leider nicht

  • In einer Datei quellen.txt sind Namen von Dateien enthalten, die in ein Verzeichnis X kopiert werden sollen. quellen.txt liegt in X.
  • Ich erstelle eine Datei in.txt, die die Dateinamen mitsamt Pfad eines anderen Verzeichnisses Y enthält. Die Dateien, die in quellen.txt stehen, sollen dann nach X kopiert werden und zwar ohne Beachtung der in Y vorhandenen Ordnerstruktur, d.h. flach.

Bisheriges Vorgehen:
1. Ich erstelle die Datei in.txt
2. Ich lese eine Zeile aus quellen.txt aus
3. Ich vergleiche den String 'quelle' aus quellen.txt mit den Strings aus in.txt.
4. Wenn 'quelle' in einem der einzelnen Strings enthalten ist, soll kopiert werden

Punkt 1. und 2. habe ich bereits hinbekommen, allerdings scheitere ich an Punkt 3.
Bisher habe ich keine Idee (for-Schleife, find) gehabt, die bei mir zufriedenstellend funktioniert hat... ein strstr()-Aequivalent ist hier quasi gesucht, was am besten nur true/false zurückgibt (bei find geht das ja mit dem errorlevel... irgendwie, da hatte ich auch was ausprobiert)

Wie lässt sich das verwirklichen?
Lässt es sich eventuell einfacher lösen v.a. wegen den bei meiner Methoden sicher unnötigen Vergleichdurchgängen? Mein bisheriger Code...
(Bitte keinen Herzinfarkt kriegen, ich bin wirklich Anfänger! ;))

01.
cd T:\Quellverzeichnis 
02.
T: 
03.
dir /b /s > V:\Zielverzeichnis\in.txt 
04.
cd V:\Zielverzeichnis 
05.
V: 
06.
FOR /f %%f IN (quellen.txt) DO @CALL :Compare %%f 
07.
pause 
08.
@Goto :eof 
09.
:Compare 
10.
@SET file=%1% 
11.
@SET 1="" 
12.
@echo %file% 
13.
FOR /f %%i IN (in.txt) DO @CALL :FindString %file% %%i 
14.
:eof 
15.
 
16.
:FindString 
17.
@set ToFind=%file% 
18.
@set SearchIn=%2%  
19.
@echo %ToFind% %SearchIn%
Würde mich über Hilfe sehr freuen,
Tanolde
Mitglied: bastla
13.08.2008 um 14:12 Uhr
Hallo Tanolde und willkommen im Forum!

Eigentlich ließe sich das in einer (etwas längeren ) Zeile erledigen:
01.
@for /f "delims=" %f in (D:\quellen.txt) do @for /f "delims=" %i in ('dir /b /s /a-d "T:\Quellverzeichnis\%f"') do @echo copy "%i" "V:\Zielverzeichnis"
Das "echo" vor dem "copy" sorgt dafür, dass die Kopierbefehle nur angezeigt, aber noch nicht ausgeführt werden.
Bei Eingabe direkt an der Kommandozeile würde (nach dem Entfernen von "echo" ), falls im Zielverzeichnis bereits eine gleichnamige Datei vorhanden wäre, nach der Erlaubnis zum Überschreiben gefragt - in einem Batch (dort müssten dann alle "%"-Zeichen verdoppelt werden) würde ohne Rückfrage überschrieben werden (zu ändern über den "copy"-Schalter "/-y").

Falls das Quellverzeichnis sehr viele Dateien enthält, könnte die Verwendung einer Datei "in.txt" (wie von Dir vorgesehen, außer, dass ich sie eher im TEMP-Verzeichnis %temp% platzieren würde) Performancevorteile bringen - dann etwa:
01.
@echo off & setlocal 
02.
set "Q=D:\quellen.txt" 
03.
set "QV=T:\Quellverzeichnis" 
04.
set "ZV=V:\Zielverzeichnis" 
05.
 
06.
dir /b /s /a-d "%QV%">"%temp%\in.txt" 
07.
for /f "usebackq delims=" %%f in ("%Q%") do for /f "delims=" %%i in ('findstr /i /c:"%%f" "%temp%\in.txt"') do echo copy "%%i" "%ZV%"
Grüße
bastla
Bitte warten ..
Mitglied: Tanolde
13.08.2008 um 14:46 Uhr
Hi bastla,

danke für die Begrüßung!
Ich bin immer wieder erstaunt, wie schnell ihr mit einer "Lösung" nach Wunsch hier ankommt (wie gesagt, habe viel hier herumgesucht) und das funktioniert

Was bei meinen ganzen Versuchen bisher noch nicht so richtig funktionieren wollte, ist die Verwendung von Subfunktionen.
Wenn ich jetzt beim zweiten Script den letzten Teil auslagern möchte (da noch zusätzliche Dinge getan werden müssen etwa...), wie muss die Subfunktion aufgebaut werden:

01.
do echo copy "%%i" "%ZV%"
soll also quasi ersetzt werden:

01.
do @CALL :EditAndCopy %%i  
02.
 
03.
:EditAndCopy 
04.
@SET String=??? 
05.
@echo copy "%String%" "%ZV%"
Ich habe immer mit %1% gearbeitet, aber irgendwie...ist das korrekt? Nach 2 Tagen Batch bin ich mittlerweile nur noch verwirrt :o

Viele Grüße,
Tanolde
Bitte warten ..
Mitglied: bastla
13.08.2008 um 15:01 Uhr
Hallo Tanolde!

Je nachdem, was Du noch alles zu tun hast, könnte schon das Setzen von Klammern genügen, also
01.
... 
02.
for /f "usebackq delims=" %%f in ("%Q%") do for /f "delims=" %%i in ('findstr /i /c:"%%f" "%temp%\in.txt"') do ( 
03.
    echo Weitere 
04.
    echo Arbeitsschritte 
05.
    echo copy "%%i" "%ZV%" 
06.
)
oder Du verwendest tatsächlich ein Unterprogramm (sinnvoll auch, wenn Du etwa noch mit aufeinander aufbauenden Variablen hantieren musst):
01.
... 
02.
for /f "usebackq delims=" %%f in ("%Q%") do for /f "delims=" %%i in ('findstr /i /c:"%%f" "%temp%\in.txt"') do call :EditAndCopy "%%i" 
03.
goto :eof 
04.
 
05.
:EditAndCopy 
06.
::Hier kommt der Parameter (%%i) als %1 an (inkl Anführungszeichen) 
07.
echo %1 
08.
echo %~1 
09.
set "String=%~1" 
10.
echo copy "%String%" "%ZV%" 
11.
::gleichwertig: echo copy %1 "%ZV%" 
12.
goto :eof
Das Unterprogramm ist wie ein eigener Batch zu betrachten, daher stehen die beim Aufruf übergebenen Parameter als %1, %2, etc (ohne ein weiteres "%" dahinter) zur Verfügung.

Vielleicht noch kurz zum Thema Anführungszeichen: Im Zweifelsfall setze ich sie, damit es keine Probleme mit im Dateinamen/-pfad enthaltenen Leerzeichen gibt, nehme sie aber grundsätzlich nicht in die Variable mit auf, sondern füge sie erst bei Verwendung wieder ein (das geht nämlich leichter, als sie im Fall des Falles entfernen zu müssen, etwa wenn sie bei einer Ausgabe mit "echo" unerwünscht wären).

Grüße
bastla
Bitte warten ..
Mitglied: Tanolde
14.08.2008 um 07:58 Uhr
Vielen Dank
Funktioniert einwandfrei!
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
Vergleiche Strings in CMD
gelöst Frage von it4baerBatch & Shell4 Kommentare

Hallo, ich möchte gerne Strings in CMD vergleichen (also Windows Eingebaaufforderung) genau gesagt übergebe ich 1. eine Parameter meinBatch.cmd ...

VB for Applications
Excel VBA - Strings vergleichen und Unterschiede markieren
gelöst Frage von chef1568VB for Applications3 Kommentare

Hallo, ich schreibe mir gerade ein VB-Script für Excel dass 2 XML-Dateien miteinander vergleicht und die Unterschiede in einer ...

Batch & Shell
String herausfiltern
gelöst Frage von goodbytesBatch & Shell5 Kommentare

Hallo, ich möchte gerne bei vielen Maschinen per Loginscript den FQDN ermitteln. Dafür wollte ich ihn aus der Rückgabe ...

VB for Applications
Zelle vergleichen
gelöst Frage von Gimli3311VB for Applications4 Kommentare

Hallo Zusammen, Hallo jodel32, Ich habe 2 Excel-Dateien mit Tabellen nun haben die Tabellen verschiedene Vorlagen. Ich hab also ...

Neue Wissensbeiträge
Internet

USA: Die FCC schaff die Netzneutralität ab

Information von Frank vor 3 StundenInternet2 Kommentare

Jetzt beschädigt US-Präsident Donald Trump auch noch das Internet. Der neu eingesetzte FCC-Chef Ajit Pai ist bekannter Gegner einer ...

DSL, VDSL

ALL-BM200VDSL2V - Neues VDSL-Modem mit Vectoring von Allnet

Information von Lochkartenstanzer vor 6 StundenDSL, VDSL1 Kommentar

Moin, Falls jemand eine Alternative zu dem draytek sucht: Gruß lks

Windows 10

Microsoft bestätigt DMA-Policy-Problem in Win10 v1709

Information von DerWoWusste vor 6 StundenWindows 10

Wer sein Gerät mit der DMA-Policy absichert, bekommt evtl. Hardwareprobleme in v1709 von Win10. Warum? Weil v1709 endlich "richtig" ...

Verschlüsselung & Zertifikate

Die Hölle friert ein weiteres Stück zu: Microsoft integriert OpenSSH in Windows

Information von ticuta1 vor 10 StundenVerschlüsselung & Zertifikate

Interessant Die Hölle friert ein weiteres Stück zu: Microsoft integriert OpenSSH in Windows SSH-Kommando in CMD.exe und PowerShell

Heiß diskutierte Inhalte
Netzwerkmanagement
Mehrere Netzwerkadapter in einem PC zu einem Switch zusammenfügen
Frage von prodriveNetzwerkmanagement21 Kommentare

Hallo zusammen Vorweg, ich konnte schon einige IT-Probleme mit Hilfe dieses Forums lösen. Wirklich klasse hier! Doch für das ...

Windows Server
RODC kann nicht aus Domäne entfernt werden
Frage von NilsvLehnWindows Server19 Kommentare

HAllo, ich arbeite in einem Universitätsnetzwerk mit 3 Standorten. Die Standorte haben alle ein ESXi Cluster und auf diesen ...

Hardware
Kein Bild mit nur einer bestimmten Grafikkarten - Mainboard Konfiguration
gelöst Frage von bestelittHardware18 Kommentare

Hallo zusammen, ich hatte schon einmal eine ähnliche Frage gestellt. Damals hatte ich genau das gleiche Problem. Allerdings lies ...

Hardware
Links klick bei Maus funktioniert nicht
gelöst Frage von Pablu23Hardware16 Kommentare

Hallo erstmal. Ich habe ein Problem mit meiner relativ alten maus jedoch denke ich nicht das es an der ...