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 Per Batch Einträge aus einer Liste in eine neue Liste Verschieben und Textteile in weiteren Listen ausgeben

Mitglied: romberto

romberto (Level 1) - Jetzt verbinden

20.06.2012, aktualisiert 16:42 Uhr, 2975 Aufrufe, 9 Kommentare

Hallo,

mit der Überschrift habe mich etwas schwer getan. Ich hoffe ich kann das ganze etwas verständlicher erklären:

Ich möchte als erstes Bezug auf folgenden Thread nehmen:

https://www.administrator.de/articles/detail.php?id=186509

dort wird der erste Schritt erläutert. Kurz:

Dateien werden mittels Liste in entsprechende Ordner verschoben!

Nun möchte ich, dass gefundene Einträge aus der Liste "Ursprung" in eine neue Liste "Haben" verschoben werden, so dass nur noch Einträge in der Ursprungsliste stehen die nicht gefunden wurden.

Anschließend möchte ich durch einen extra Befehl die Möglichkeit haben aus "Ursprung" und "Haben" gefilterte Informationen auszugeben und zwar in eine "Have" und eine "Missing" Liste.

Genauer:

Die Einträge in der Ursprungsliste sind wie folgt aufgebaut:

Dateiname=Datum - Genaue_Beschreibung

dies soll auch genauso in die Liste "Haben" verschoben werden.

Nun soll jeweils nur "Genaue Beschreibung" also quasi alles nach " - " in den "Have" und "Missing" Listen ausgegeben werden.

Die Batch von Bastla, die den ersten Teil löst habe ich hier:
01.
@echo off & setlocal 
02.
> set "Ordner=D:\Ordner mit vielen Dateien" 
03.
> set "Liste=D:\Liste.txt" 
04.
>  
05.
> pushd "%Ordner%" 
06.
> for /f "delims=" %%i in ('dir /b/a-d') do for /f "tokens=1* delims==" %%a in ('findstr /ib 
07.
> "%%i" "%Liste%"') do ( 
08.
>     md "%%b" 2>nul && move "%%i" "%%b" 
09.
> ) 
10.
> popd 
11.
> 

Ich hoffe, dass dies irgendwie möglich ist.

Viele Grüße

Robert
Mitglied: Friemler
20.06.2012, aktualisiert um 20:45 Uhr
Hallo Robert,

teste mal die folgenden 2 Scripte.

1. Als Ersatz für obiges Script von bastla, erweitert um das Erzeugen einer Liste der nicht-existierenden Dateien:
01.
@echo off & setlocal 
02.
 
03.
set "Folder=E:\Ordner mit vielen Dateien" 
04.
set "InList=E:\Liste.txt" 
05.
set "ExistList=E:\Liste2.txt" 
06.
set "NotExistList=E:\Liste3.txt" 
07.
 
08.
 
09.
type NUL > "%ExistList%" 
10.
type NUL > "%NotExistList%" 
11.
pushd "%Folder%" 
12.
 
13.
for /f "usebackq tokens=1* delims==" %%a in ("%InList%") do ( 
14.
  dir /b /a:-d "%%a" >NUL 2>&1 && ( 
15.
    call :FileExists "%%a" "%%b" 
16.
  ) || ( 
17.
    call :FileNotExists "%%a" "%%b" 
18.
19.
20.
 
21.
echo move "%NotExistList%" "%InList%" 
22.
popd 
23.
 
24.
exit /b 
25.
 
26.
 
27.
 
28.
:FileExists 
29.
  echo md "%~1" 2>NUL 
30.
  echo move "%~1" "%~2" 
31.
  >>"%ExistList%" echo %~1=%~2 
32.
exit /b 0 
33.
 
34.
 
35.
:FileNotExists 
36.
  >>"%NotExistList%" echo %~1=%~2 
37.
exit /b
Um den Code "scharf" zu schalten, müssen die ECHO-Befehle in den Zeilen 21, 29 und 30 entfernt werden.


2. Um Deine zweite Anforderung zu lösen:
01.
@echo off & setlocal 
02.
 
03.
set "ExistList=E:\Liste2.txt" 
04.
set "HaveList=E:\Have.txt" 
05.
set "NotExistList=E:\Liste.txt" 
06.
set "MissingList=E:\Missing.txt" 
07.
 
08.
 
09.
type NUL > "%HaveList%" 
10.
type NUL > "%MissingList%" 
11.
 
12.
call :ProcessFile "%ExistList%" "%HaveList%" 
13.
call :ProcessFile "%NotExistList%" "%MissingList%" 
14.
exit /b 
15.
 
16.
 
17.
:ProcessFile 
18.
  for /f "usebackq tokens=1* delims==" %%a in ("%~1") do ( 
19.
    call :ProcessLine "%%b" "%~2" 
20.
21.
exit /b 
22.
 
23.
 
24.
:ProcessLine 
25.
  set "line=%~1" 
26.
  set "line=%line:* - =%" 
27.
  >>"%~2" echo %line% 
28.
exit /b
Achtung!! Falls die Dateinamen in der Ursprungsliste Umlaute enthalten, muss die Datei in der Codierung OEM850 abgespeichert werden.

Gruß
Friemler
Bitte warten ..
Mitglied: romberto
20.06.2012, aktualisiert um 19:07 Uhr
Hallo Friemler,

Vielen Dank schonmal. Ich habe das ganze gerade kurz einmal getestet und leider funktioniert das erste Script nicht wie ich es brauche. Die Dateien in der Liste haben teils sehr komische Dateinamen, da diese noch im 8.3 Format sind. z.B. A&B-CDEF.GHI

Nun bekomme ich die Fehlermeldung, dass z.B. B-CDEFI.GHI nicht gefunden wurde und in Liste.txt steht anschließend nur noch A

Sonst passiert leider nichts

Das Miss und Have Liste Script klappt hervoragend! Vielen Dank

EDIT: Ich habe es soeben nochmals ausführlicher getestet: Ohne Sonderzeichen in den Dateinamen funktioniert es wie es soll (auch mit den Listen) -> ABER: die Dateien werden nicht in gleichnamige Ordner verschoben, sondern einfach umbennant.
Bitte warten ..
Mitglied: Friemler
20.06.2012, aktualisiert um 19:38 Uhr
Hallo Robert,

das Problem mit den Dateinamen, die Sonderzeichen enthalten, liegt am Batchscript-Interpreter. Zeichen wie z.B. & gehören zum Sprachschatz von Batchscript und werden bei den ECHO-Befehlen in den Zeilen 31 und 36 als Operator interpretiert.

Btr. Dateien werden einfach umbenannt: Mein Fehler

Beides sollte sich erledigen, wenn Du die beiden Unterprogramme FileExists und FileNotExists durch folgenden Code ersetzt:
01.
:FileExists 
02.
  echo md "%~2" 2>NUL 
03.
  echo move "%~1" "%~2" 
04.
  >>"%ExistList%" <NUL set /p "=%~1=%~2" 
05.
  >>"%ExistList%" echo. 
06.
exit /b 0 
07.
 
08.
 
09.
:FileNotExists 
10.
  >>"%NotExistList%" <NUL set /p "=%~1=%~2" 
11.
  >>"%NotExistList%" echo. 
12.
exit /b
Dadurch, dass die auszugebenden Strings jetzt in Anführungszeichen eingeschlossen sind, sollte das Problem nicht mehr auftreten.

Btr. die Ausgabeliste: Die Datei, deren Name in der Variablen NotExistList eingetragen ist, wird in Zeile 21 über die ursprüngliche Eingabedatei geschrieben.

Gruß
Friemler
Bitte warten ..
Mitglied: romberto
20.06.2012 um 19:59 Uhr
Hallo Friemler,

Super! Das mit den sonderzeichen stellt nun kein problem mehr dar und Listen kuntionieren auch 1a. Nur leider kopiert er mir die Dateien nicht (entweder garnicht oder es wird angezeigt, dass die Datei bereits von einem anderen Prozess verwendet wird) Mit echo vor den befehlen zeigt er mir zwar an was er machen möchte, ohne echo macht er es aber dann nicht. Ich habe auch schon versucht die Zeile von Bastla einzufügen bzw. anzupassen, da macht er mir aber zusätzlich noch einen Ordner mit Dateinamen.
Bitte warten ..
Mitglied: Friemler
20.06.2012 um 20:09 Uhr
Hallo Robert,

warum einfach, wenn es auch umständlich geht?

Das "wird von einem anderen Prozess verwendet" kommt wahrscheinlich von der Art und Weise, wie ich die Existenz der Datei überprüfe. Geht auch einfacher. Ersetze bitte die FOR-Schleife im Hauptprogramm durch folgenden Code:
01.
for /f "usebackq tokens=1* delims==" %%a in ("%InList%") do ( 
02.
  if exist "%%a" ( 
03.
    call :FileExists "%%a" "%%b" 
04.
  ) else ( 
05.
    call :FileNotExists "%%a" "%%b" 
06.
07.
)
Gruß
Friemler
Bitte warten ..
Mitglied: romberto
20.06.2012, aktualisiert um 20:38 Uhr
Hallo Friemler,

Jetzt geht alles einwandfrei, bis auf eine Kleinigkeit: ist es möglich, dass Liste2.txt fortlaufend zu machen? bis jetzt überschreibt er mir diese bei jedem neuen durchgang neu. achja und wäre es möglich beim 2ten scrip den output alphabetisch zu sortieren?

Ich denke dann bin ich wunschlos glücklich

Auf jedenfall vielen Dank für deine Mühen.

Viele Grüße

Robert
Bitte warten ..
Mitglied: Friemler
20.06.2012 um 20:48 Uhr
Hallo Robert,

die Liste2.txt zu sortieren wird schwierig. Um das Überschreiben zu verhindern, könntest Du einfach Zeile 9
type NUL > "%ExistList%"
streichen.

Gruß
Friemler
Bitte warten ..
Mitglied: romberto
20.06.2012 um 21:02 Uhr
SUPER! Vielen, vielen Dank! Bin Wunschlos Glücklich!

Viele Grüße und noch einen schönen Abend

Robert
Bitte warten ..
Mitglied: Friemler
20.06.2012 um 21:05 Uhr
Hallo Robert,

Du hast Dein Posting editiert!!

Die Ausgabe des zweiten Scripts kann man sehr einfach sortieren. Ersetze das Unterprogramm ProcessFile durch folgenden Code:
01.
:ProcessFile 
02.
  for /f "usebackq tokens=1* delims==" %%a in ("%~1") do ( 
03.
    call :ProcessLine "%%b" "%~2" 
04.
05.
 
06.
  sort "%~2" /o "%~2.tmp" 
07.
  move "%~2.tmp" "%~2" 
08.
exit /b
Gruß
Friemler
Bitte warten ..
Ähnliche Inhalte
Batch & Shell

Powershell PSObject Liste erstellen und Ausgeben

gelöst Frage von MarabuntaBatch & Shell1 Kommentar

Ich will eine Liste erstellen mit Dateiname, Dateiversion und Produktversion Es werden einige Rechner abgefragt, falls möglich sollte es ...

Visual Studio

CSharp Bereiche von Listen von Zahlen ausgeben

gelöst Frage von Aicher1998Visual Studio1 Kommentar

Hallo Ich hab noch ein Problem. Ich dachte, das wäre in 5-10 Minuten erledigt, aber ich schaffe es einfach ...

Batch & Shell

TODO List in ( Batch )

gelöst Frage von clragonBatch & Shell2 Kommentare

Hallo Liebe Forum-Nutzer Ich habe heute versucht, mir eine Batch zu schreiben die Notizen anzeigt, aka eine Todo Liste ...

Batch & Shell

Batch - Listen filtern

gelöst Frage von migrubiBatch & Shell2 Kommentare

hallo, ich suche mich noch wuschig. ich habe eine liste mit emails meiner freunde und möchte einen newsletter verschicken, ...

Neue Wissensbeiträge
Windows 10

USB Maus und Tastatur versagen Dienst unter Windows 10

Erfahrungsbericht von hardykopff vor 1 TagWindows 105 Kommentare

Da steht man ziemlich dumm da, wenn der PC sich wegen fehlender USB Tastatur und Maus nicht bedienen lässt. ...

Administrator.de Feedback
Update der Seite: Alles zentriert
Information von Frank vor 1 TagAdministrator.de Feedback18 Kommentare

Hallo User, die größte Änderung von Release 5.8 ist das Zentrieren der Webseite (auf großen Bildschirmen) und ein "Welcome"-Teaser ...

Humor (lol)

WhatsApp-Nachrichten endlich auch per Bluetooth versendbar

Information von BassFishFox vor 2 TagenHumor (lol)4 Kommentare

Genau darauf habe ich gewartet! ;-) Der beliebte Messaging-Dienst WhatsApp erhält eine praktische neue Funktion: Ab dem nächsten Update ...

Google Android

Googles "Android Enterprise Recommended" für Unternehmen

Information von kgborn vor 2 TagenGoogle Android3 Kommentare

Hier eine Information, die für Administratoren und Verantwortliche in Unternehmen, die für die Beschaffung und das Rollout von Android-Geräten ...

Heiß diskutierte Inhalte
Speicherkarten
Vergessliche USB-Sticks?
Frage von hanheikSpeicherkarten14 Kommentare

Ich habe in den letzten Tagen 500 USB-Sticks mit Bilddateien bespielt. Obwohl ich die Dateien mit größter Sorgfalt kopiert ...

Hyper-V
Hyper-V mit altem XEON-Server. Was ist falsch?
Frage von LollipopHyper-V11 Kommentare

Hallo Bin etwas frustriert. Kleinbetrieb, ca. 15 PC's, 2 Stk. Server mit einigen virtuellen PC's für Fernwartung, VaultServer für ...

Windows Server
NTFS Berechtigungen Ordnerstruktur
Frage von hukahu23489Windows Server11 Kommentare

Hallo, ich bin seit kurzem in einer neuen IT-Abteilung und bin über das Berechtigungskonzept des Unternehmens sehr schockiert. Ich ...

Exchange Server
NDR umleiten
Frage von isomasterExchange Server10 Kommentare

Hallo Kollege, ich habe ein Problem mit dem Exchange Server. Wir haben unsere info@ Adresse als Verteilergruppe eingebunden (so ...