[BATCH] Einzelne Datei suchen und umbenennen

Carsten Schermuly

Grünschnabel
Wer mit seiner Hilfe vergleichen will - bitte -
Das Folgende ist ein Zitat aus der Hilfe zu M$ Windows 2000 Professional (WinNT 5)

---

Append
Ermöglicht Programmen das Öffnen von Datendateien in den angegebenen Ordnern, als wären diese Dateien im aktuellen Ordner gespeichert.

Die angegebenen Ordner werden hinzugefügte Ordner (appended) genannt, da zu öffnende Dateien in ihnen so angesprochen werden können, als ob sie sich im aktuellen Verzeichnis befinden würden.

Code:
append [;] [[Laufwerk:]Pfad[;...]] [[/x:{on | off}] [/path:{on | off}] [ /e]

Parameter

;

Löscht die Liste der hinzugefügten Ordner.

[[Laufwerk:]Pfad

Gibt das Laufwerk (falls es nicht das aktuelle ist) und den Ordner an, der dem aktuellen Ordner hinzugefügt werden soll. Sie können mehrere Einträge für [Laufwerk:]Pfad angeben, indem Sie die Einträge durch Semikolons (;) voneinander trennen. Wird append allein verwendet, wird die bestehende Liste der hinzugefügten Ordner gelöscht.

/x:{on | off}

Gibt an, ob das MS-DOS-Teilsystem bei der Ausführung von Programmen die hinzugefügten Ordner durchsuchen soll. Wenn Sie den Schalter /x:eek:n verwenden, werden auch hinzugefügte Ordner durchsucht. Wenn Sie den Schalter /x:eek:ff verwenden, werden hinzugefügte Ordner nicht durchsucht. Sie können /x:eek:n mit /x abkürzen. Wenn Sie /x:eek:n angeben möchten, müssen Sie dies bei der ersten Verwendung von append nach dem Start des Systems durchführen. Danach können Sie zwischen /x:eek:n und /x:eek:ff wechseln.

/path:{on | off}

Gibt an, ob ein Programm hinzugefügte Ordner nach einer Datendatei durchsuchen soll, wenn bereits ein Pfad im Namen der gesuchten Datei enthalten ist. Die Standardeinstellung ist /path:eek:n.

/e

Weist einer Umgebungsvariablen mit dem Namen append die Liste der hinzugefügten Ordner zu. Dieser Parameter kann nur bei der ersten Verwendung von append nach dem Start des Systems angegeben werden. Wenn Sie /e verwenden, können Sie mit dem Befehl set die Liste der hinzugefügten Ordner anzeigen. Weitere Informationen über Umgebungsvariablen erhalten Sie, indem Sie in der Liste Siehe auch auf set klicken.

Siehe auch
---

"Siehe auch" ist ein Link und führt u. A. zu "APPEND - Beispielen",
womit man dann ja tatsächlich nur noch auf die Füße fallen kann.
 

crazymischl

Erfahrenes Mitglied
er sucht ja eine Datei, von der er nicht weiß wo sie liegt,
Er kann doch einfach in meiner Batch als "ordner" den Laufwerkpfad angeben, und die Batch durchsucht automatisch alle ordner und unterordner auf C:\ :
Code:
@echo off
set dir=c:\
set file=datei.txt
for /r "%dir%" %%i in ("%file%") do if exist %%i (echo %%i >> log.txt && echo. >> log.txt && ren "%%i" "namen%%~xi")
pause

PS: Das Thema ist doch schon 1 Monat alt, bitte in Zukunft keine alten Themen mehr "ausgraben", denn wenn der Fragesteller noch eine Frage hätte, würde er sich melden....
 

Carsten Schermuly

Grünschnabel
OK - ich hab' nicht auf das Datum geachtet.
Mir fiel auf, daß das Thema nicht beendet war, z. B. durch einen Satz wie "Ist erledigt, ich habe eine Lösung gefunden" oder Ähnliches.
Anfänglich sah ich die Möglichkeit zur Lösung mit thefreedictionairy.

Wie Du siehst, nehme ich noch nicht lange an diesem Forum teil, da ist mir so etwas natürlich nicht geläufig - "bei Antworten auf's Darum achten".
Darum hoffe ich, daß es nur kleine Fettnäpfchen waren, in die ich trat.

Zur Entschädigung gibt es einen Blick nach Südafrika, da ist jetzt Herbst.
Ich war vor 20 Jahren dort (Johannesburg und Swaziland) und einer meiner Söhne war letztes Jahr dort (Kapstadt und östlich davon), von ihm sind die Fotos.
 

Anhänge

  • DSCN4307a.jpg
    DSCN4307a.jpg
    98,4 KB · Aufrufe: 371
  • DSCN4308a.jpg
    DSCN4308a.jpg
    80,7 KB · Aufrufe: 364
  • DSCN4309a.jpg
    DSCN4309a.jpg
    107,2 KB · Aufrufe: 359

Dwza

Grünschnabel
lange rede kurzer sinn...
(auch wenns nun schon einige zeit her ist und wahrscheinlich nicht mehr gebraucht wird)

Code:
@pushd \
cd\
dir /S /B /A: H S R A \ | FIND /I "dateiname.xyz"
@popd


oder um die batch mit einem parameter (welcher natürlich der dateiname ist) aufzurufen

Code:
@pushd \
cd\
dir /S /B /A: H S R A \ | FIND /I "%1"
@popd

viel spaß damit :)

ps: sucht alle datein die vorhanden sind. auf allen laufwerken.
anschließend wechselt es in das verzeichnis in dem was gefunden wurde.
speichern der information ist ein anderes thema *gg* denke nun kann man das "alte" thema schließen ^^
 
Zuletzt bearbeitet:
K

kraftzwerg

Auch wenn der Beitrag schon etwas älter ist, so möchte ich ihn dennoch neu auskramen.
Dies ist der einzige Thread welcher Sinnvolle ideen zum Thema anbietet, auch der eizige Thread welcher mich zu einer Forenanmeldung brachte.

Ich habe ein ähnliches script geschrieben.
Es soll mir in einem Netzwerk sämtliche pst dateien finden und in einen Lokalen Ordner kopieren.
Es funktioniert auch alles wunderbar, nur mit einem Hacken:

Es wird jeweils nur die erste gefundene Datei kopiert. Im erstellten log Eintrag wiederrum stehen alle gefundenen Dateien.

Ich bin da schon seid dem Wochenende am verzweifeln warum das kopieren nicht richtig geht.

Das Problem ist das uns der Exchange weg geflogen ist, und wir schnell die lokalen ost dateien brauchen. Die Datensicherung ist leider auch put :-(

Am Anfang des Scriptes werden Variablen zur Suche definiert.
Es wird ein Netzlaufwerk zum suchen verbunden (Dos macht kein UNC) und der Ordner angegeben.

Das Problem tritt in der for Schleife auf.
mkdir und echo funktioniert so wie es soll (mehrere durchläufe bei mehreren Dateien) copy kopiert nur den ersten Fund.


Am Ende des Scriptes wird der zu suchende Rechnername geändert, und das Script erneut durchlaufen.


Wer Das Script mal testen will, braucht nur die Variablen am Anfang, und die if Schleifen am ende modifizieren

Code:
@echo off

:VARIABLEN
REM Name des Rechners für den ersten Schleifendurchlauf:
set "PCNAME=PC1"

REM Zu durchsuchender Ordner
set "SDIR=\Dokumente und Einstellungen"

REM Zu suchende Datei
set "FILE=*.ost"

REM Dieses Netzlaufwerk wird zur Suche gemountet
set "NETDRIVE=y:"

REM Ordner in den das Backup kopiert werden soll
set "BACKUPPATH=d:\outlooksave\ost"

REM Name des Logfiles
set "LOGFILE=d:\outlooksave\ost\log.txt"

:BEGIN

cls
echo "aktueller pc: %PCNAME%"
ping -n 1 -w 999 %PCNAME%

if %errorlevel% EQU 1 goto NEXT

net use %NETDRIVE% \\%PCNAME%\c$

for /r "%NETDRIVE%%SDIR%" %%i in ("%FILE%") do if exist %%i (echo %PCNAME% >> %LOGFILE% && echo. %%i >> %LOGFILE% && if not exist %BACKUPPATH%\%PCNAME% (mkdir %BACKUPPATH%\%PCNAME%) && copy "%%i" %BACKUPPATH%\%PCNAME%\)



net use /delete %NETDRIVE%

:NEXT

if "%PCNAME%"=="PC1" (
    set PCNAME=PC2
    goto BEGIN
)

if "%PCNAME%"=="PC2" (
    set PCNAME=PC3
    goto BEGIN
)

:EXIT
echo "--> fertig <--"
pause


Hat jemand eine Idee warum das kopieren nicht richtig geht?
Ich bange, hoffe und Danke
mfg
Kraftzwerg
 

deepthroat

Erfahrenes Mitglied
Hi.

Das Problem ist, das die Anweisungen falsch geklammert sind.

Es erfolgt keine Ausgabe hierbei:
Code:
if "a"=="b" (echo gleich) && echo nein
Hierbei wird "nein" ausgegeben:
Code:
(if "a"=="b" echo gleich) && echo nein

Das nur 1 Mal kopiert wird liegt daran, das das Backupverzeichnis beim ersten Durchlauf noch nicht existiert und deshalb die if not exist Bedingung wahr ist. Somit wird dann mkdir und bei Erfolg dann auch copy aufgerufen.

Und warum prüfst du ständig in der Schleife ob das Backupverzeichnis existiert? Das kannst du doch vorher erledigen.

Gruß

PS: Evtl. solltest du lieber eine CALL Anweisung in der Schleife verwenden, das macht das ganze übersichtlicher.
 
Zuletzt bearbeitet:
K

kraftzwerg

Vielen Vielen Dank deepthroat

Ich habe die if bedingung zum Ordner erstellen aus der for schleife ausgegliedert.
Dadurch entstehen zwar auch leere Ordner, aber beide Dateien werden dafür kopiert.
Mit call werde ich mich später befassen, jetzt muß das Script erstmal die knapp 100 Rechner scannen.
Dank call wärs nicht nur übersichtlicher, sondern auch leichter erweiterbar.
Ein Script welches nicht nach dem einmaligen gebrauch in der Tonne verschwindet :)

Danke nochmal für die schnelle Antwort

Wer noch interessiert ist, hier ist mein Script: (die for schleife ist eine Modifikation von crazymischl´s for Schleife)

Code:
@echo off

:VARIABLEN
REM Name des Rechners für den ersten Schleifendurchlauf:
set "PCNAME=PC1"

REM Zu durchsuchender Ordner
set "SDIR=\Dokumente und Einstellungen"

REM Zu suchende Datei
set "FILE=*.ost"

REM Dieses Netzlaufwerk wird zur Suche gemountet
set "NETDRIVE=y:"

REM Ordner in den das Backup kopiert werden soll
set "BACKUPPATH=d:\outlooksave\ost"

REM Name des Logfiles
set "LOGFILE=d:\outlooksave\ost\ost_log.txt"

:BEGIN

cls
echo "aktueller pc: %PCNAME%"
ping -n 1 -w 999 %PCNAME%

if %errorlevel% EQU 1 goto NEXT

net use %NETDRIVE% \\%PCNAME%\c$

if not exist %BACKUPPATH%\%PCNAME% (mkdir %BACKUPPATH%\%PCNAME%) 

for /r "%NETDRIVE%%SDIR%" %%i in ("%FILE%") do if exist %%i (echo %PCNAME% >> %LOGFILE% && echo. %%i >> %LOGFILE% && copy "%%i" %BACKUPPATH%\%PCNAME%\)



net use /delete %NETDRIVE%

:NEXT

if "%PCNAME%"=="PC1" (
    set PCNAME=PC2
    goto BEGIN
)

if "%PCNAME%"=="PC2" (
    set PCNAME=PC3
    goto BEGIN
)

:EXIT
echo "--> fertig <--"
pause

mfg
Kraftzwerg
 
Zuletzt bearbeitet von einem Moderator:

Irschen

Grünschnabel
Hallo

Ich weiß das Thema ist schon älter aber passt so ziemlich zu dem was ich Suche
Problem.

Ich bin ein KOMPLETTER Neuling im Thema programmieren etc.

Ich möchte dateien in einem bestimmten/festgelegten ordner finden und umbenennen

beispiel

00123456 sollen die ersten beiden stellen 00 entfernt werden

nehme ich dafür einfach

@echo off

rename c:\Test\00123456 /s 123456

bzw

rename c:\Test\00%%%%%% /s xxx.yyy.%%%%%%

die zahlen sind immer bzw jedesmal anders es sollen nur die ersten beiden stellen gelöscht werden

BEISPIEL:

00123456
ändern in xxx.yy.123456

wie gesagt die zahlen sind immer unterschiedlich
 
Zuletzt bearbeitet: