Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

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

Batch um Dateien in Unterordnern umzubenennen

Frage Entwicklung Batch & Shell

Mitglied: tob1as

tob1as (Level 1) - Jetzt verbinden

20.11.2007, aktualisiert 11.12.2007, 3946 Aufrufe, 28 Kommentare

Hallo zusammen

Ich hab folgendes Problem:

Ich habe mehrere Ordner mit Subfolder welche *.ok - Dateien drin haben.
Ich brauche, um in Access mit diesen Dateien zu arbeiten sie aber als *.txt.

Ich krieg das mit dem Umbennen mitsamt den Dateien in den Unterordner leider nocht nicht so ganz hin. Mein bisheriger Ansatz:

for /r "D:\WORK\Rechnungstool\Daten" %i in (*.ok) do @ECHO rename %i %~ni.txt

Habe mir gedacht, wäre evtl. einfacher, wenn ich zuerst alle *.ok-Dateien aus den Ordnern/Unterordnern rauskopiere und danach in einem Verzeichnis alle umbenenne mit demselben Batch.

Habt ihr eine Idee wie ich das mache? Bin Batch-technisch nicht so fit.


Wäre super wenn mir jemand dabei helfen könnte!


Lieber Gruss

Tobias





[Edit Biber] Den beliebten Verschreiber "umzubennen" im Titel hab ich mal "umbannt". [/Edit]
28 Antworten
Mitglied: bastla
20.11.2007 um 17:15 Uhr
Hallo tob1as!

Versuch mal
01.
for /f "delims=" %i in ('dir /s /b "D:\WORK\Rechnungstool\Daten\*.ok"') do @ECHO ren "%i" *.txt
Grüße
bastla
Bitte warten ..
Mitglied: Biber
20.11.2007 um 17:35 Uhr
Moin tob1as,

aber auch Dein geposteter Ansatz klappt bei Pfad/Dateiangaben mit Leerzeichen im Namen,
wenn Du die Zählvariable %i in Anführungszeichen setzt.
[Demo]
01.
for /r "c:\dokumente und Einstellungen" %i in (*.txt) do @ECHO rename "%i" "%~ni.bla"
Ob es für Access später mal sinnvoller ist, diese Dateien in EINEM Ordner zu haben, ist eine andere Sache.
Wenn es so ist, dann brauchst Du tatsächlich noch eine zweite Anweisung (MOVE "%i" x:\Accesssfiles\").
In einem Schritt kannst Du nicht ein MOVE und ein REN durchziehen.

Grüße
Biber
Bitte warten ..
Mitglied: bastla
20.11.2007 um 17:41 Uhr
@Biber

In einem Schritt kannst Du nicht ein MOVE und ein REN durchziehen.
Eigentlich sollte doch ein
01.
move "D:\WORK\Rechnungstool\Daten\Test.ok" "D:\WORK\Sammel\Test.txt"
ausreichen (wenn es den Zielordner schon gibt) - oder steh' ich gerade ganz daneben?

Grüße
bastla
Bitte warten ..
Mitglied: Biber
20.11.2007 um 17:51 Uhr
Jepp, bastla,

Du hast Recht.
Mit Wildcards ginge es nicht, wohl aber mit explizitem Namen:
01.
>move xxxtest.xxx d:\work\*.yyy 
02.
Die Syntax für den Dateinamen, Verzeichnisnamen oder die Datenträgerbezeichnung ist falsch. 
03.
### geht nicht. 
04.
### 
05.
>move xxxtest.xxx d:\work\xxxtest.yyy 
06.
### Dat geiht.
Also dann doch im einem Rutsch.

Grüße
Biber
Bitte warten ..
Mitglied: Biber
23.11.2007 um 07:57 Uhr
@tob1as

Rückfrage:
Ist Deine Frage beantwortet, gibt es neue Probleme, bist Du schon im Weihnachtsstress...?

Grüße
Biber
Bitte warten ..
Mitglied: tob1as
26.11.2007 um 09:11 Uhr
Rückfrage:
Ist Deine Frage beantwortet, gibt es neue

Hi Biber

Sorry hatte sehr viel um die Ohren letzte Woche, und zu diesem Problem kamen noch 20000 andere dazu. Erst mal danke für deine Hilfe und deine Geduld!

Hab das mal so ausprobiert ums zu testen mit euren Code-Hilfen:

01.
 
02.
move "D:\WORK\Rechnungstool\Daten\test.OK" "D:\WORK\Rechnungstool\BatchFiles\Test.txt" 
03.
 
Das funktioniert prima, und ist schlussendlich genau das was ich möchte.

Jetzt habe ich noch 1 Verständnisfrage:

1. Ich habe eine Batch im Ordner D:\WORK\Rechnungstool\BatchFiles\ und möchte, wenn ich diese ausführe, alle .OK-Dateien der Unterordner 1-12 innerhalb D:\WORK\Rechnungstool\BatchFiles\2006-2017 in EIN D:\WORK\Rechnungstool\BatchFiles\daten.txt kopiert wird. Wie mache ich das genau?

Mein Ansatz ist so:

01.
move "D:\WORK\Rechnungstool\BatchFiles\*\*.OK" "D:\WORK\Rechnungstool\BatchFiles\Test.txt"
Doch leider funktioniert das noch nicht.

Herzlichen Dank nochmals!
Bitte warten ..
Mitglied: Biber
26.11.2007 um 09:44 Uhr
Moin tob1as,
Sorry hatte sehr viel um die Ohren letzte Woche, ...
Und ich sach' noch: Lass Dich von diesem Weihnachtsrummel verrückt machen...*gg

...und zu diesem Problem kamen noch 20000 andere dazu.
Hab ich nicht schon eine Million Mal gesagt, ihr sollt nicht so übertreiben?

move "D:\WORK\Rechnungstool\BatchFiles\*\*.OK" ..{anywhere}..
Okay, an dieser Stelle sind keine Wildcards erlaubt.
Aber der Ersatz-Befehl ist nur unwesentlich länger:

a) vom CMD-Prompt
01.
 for /D %i in ("D:\WORK\Rechnungstool\BatchFiles\*") do Move "%i\*.OK" ...{anywhere}
b) im Batch - zwei Prozentzeichen vor den Zählvariablen.
01.
 for /D %%i in ("D:\WORK\Rechnungstool\BatchFiles\*") do Move "%%i\*.OK" ...{anywhere}
Hilfe zu FOR /D (D=Director's Cut) unter "For /?" am Cmd-Prompt.

Grüße
Biber
Bitte warten ..
Mitglied: tob1as
26.11.2007 um 10:27 Uhr
Und ich sach' noch: Lass Dich von
diesem Weihnachtsrummel verrückt
machen...*gg
Der beginnt erst

01.
 for /D %%i in 
02.
("D:\WORK\Rechnungstool\BatchFiles\*") do Move "%%i\*.OK" ...{anywhere}


Sorry, hab noch ein wenig Verständnisschwierigkeiten mit diesem Code-Schnipsel und bekomme das Ganze irgendwie noch nicht so hin wie ich es haben möchte.

Ich habe die Daten ja im D:\WORK\Rechnungstool\BatchFiles\2007-2017 Verzeichnis in den Unterordnern 01-12.

Beispiel: D:\WORK\Rechnungstool\BatchFiles\2007\01


Doch irgendwie kann die Batch nicht auf die Files zugreiffen weil die Struktur in der Batch noch nicht funktioniert.

Habs mal so (und noch über andere Wege) probiert, komme leider noch nicht zum gewünschten Ergebnis:

01.
for /D %%i in ("D:\WORK\Rechnungstool\BatchFiles\*") do Move "%%i\*.OK" "D:\WORK\Rechnungstool\BatchFiles\Test.txt"
Deine Geduld ist umwerfend, tausend Dank!
Bitte warten ..
Mitglied: Biber
26.11.2007 um 10:41 Uhr
Moin Tob1as,

da hatte ich die Struktur falsch verstanden.
Wenn Dein Beispiel "D:\WORK\Rechnungstool\BatchFiles\2007\01" heißt, dass in 01, 02, 03... die *.OK-Dateien sind, dann:
01.
 for /D %i in ("D:\WORK\Rechnungstool\BatchFiles\2007\*") do Move "%i\*.OK" ...{anywhere}
Upps, JETZT versteh ich ,glaube ich...
Du hast
D:\WORK\Rechnungstool\BatchFiles\2007
D:\WORK\Rechnungstool\BatchFiles\2008
D:\WORK\Rechnungstool\BatchFiles\2009
und darunter jeweils ...01, 02, 03....

Dann imBatch
01.
for /D %%i in ("D:\WORK\Rechnungstool\BatchFiles\2007\*") do ( 
02.
for /D %%j in ("%%i\*") do Move "%%i\%%~nxj\*.OK" ...    
03.
)
Oder einfach mit FOR /R Rekursiv:
01.
 for /R "D:\WORK\Rechnungstool\BatchFiles" %%i in ("*.OK") do move %%i {anywhere}

Deine Geduld ist umwerfend...
Mehrere Ex-Schwiegermütter im Lauf der Zeit, das trainiert...

Grüße
Biber
Bitte warten ..
Mitglied: tob1as
26.11.2007 um 11:08 Uhr
Moin Biber

Du hast
D:\WORK\Rechnungstool\BatchFiles\2007
D:\WORK\Rechnungstool\BatchFiles\2008
D:\WORK\Rechnungstool\BatchFiles\2009
und darunter jeweils ...01, 02, 03....

Jep genau!



Oder einfach mit FOR /R Rekursiv:
01.
 for /R 
02.
> "D:\WORK\Rechnungstool\BatchFiles" 
03.
> %%i in ("*.OK") do move %%i 
04.
> {anywhere} 
05.
> 


Habs jetzt so gemacht:

01.
 for /R "D:\WORK\Rechnungstool\BatchFiles" %%i in ("*.OK") do move %%i D:\WORK\Rechnungstool\Test.txt"
Was stimmt daran nicht? Hab mich über die Befehle nun relativ gut informiert, komme jedoch nicht auf eine Lösung

Entweder stelle ich mich so blöd an, meine Struktur stimmt nicht, oder heute ist einfach mein Pechtag.

Tobias
Bitte warten ..
Mitglied: Biber
26.11.2007 um 11:19 Uhr
Moin tob1as,

copy & paste diese Zeile..
01.
for /R "D:\WORK\Rechnungstool\BatchFiles" %i in ("*.OK") do @Echo move %i D:\WORK\Rechnungstool\Test.txt
...vom Cmd-Prompt aus und poste das Ergebnis, FALLS ES NICHT STIMMT.

Ich denke, Du hast nur ein überzähliges Anführungszeichen in Deiner Batch-Zeile.

Grüße
Biber
Bitte warten ..
Mitglied: bastla
26.11.2007 um 11:51 Uhr
Hallo tob1as!

Nur zur Sicherheit: Willst Du alle *.OK als Ergebnis in einer großen "D:\WORK\Rechnungstool\BatchFiles\Test.txt"-Datei? Wenn ja, dann etwa so:
01.
for /R "D:\WORK\Rechnungstool\BatchFiles" %i in ("*.OK") do type "%i">>"D:\WORK\Rechnungstool\BatchFiles\Test.txt"
Falls aber alle Dateien in einem gemeinsamen Ordner (als Einzeldateien) sollen, müsstest Du beachten, dass bereits vorhandene gleichnamige Dateien durch die später verschobenen überschrieben werden - insoferne wäre eine Namenskonvention, etwa durch Voranstellen von zB "2007_11_" vor den Dateinamen, zu überlegen.

Grüße
bastla
Bitte warten ..
Mitglied: tob1as
26.11.2007 um 12:13 Uhr
Hallo bastla und Biber

Nur zur Sicherheit: Willst Du alle *.OK als
Ergebnis in einer großen
"D:\WORK\Rechnungstool\BatchFiles\Test.txt"-Datei?

Ja!

01.
for /R 
02.
> "D:\WORK\Rechnungstool\BatchFiles" 
03.
> %i in ("*.OK") do type 
04.
> "%i">>"D:\WORK\Rechnungstool\BatchFiles\Test.txt" 
05.
> 

Genau das suchte ich, ist es jedoch auch möglich, das die einzelnen Werte untereinander erscheinen, jetzt hab ich mal 2 .OK Files erstellt mit den Inhalten test1 und test2, im Text.txt steht nun test1test2.

Wie krieg ich das untereinander? Hab es noch nicht geschafft dass der Schleife noch ein Zeilenumbruch angehängt wird (\n?).



Falls aber alle Dateien in
einem gemeinsamen Ordner (als Einzeldateien)
sollen, müsstest Du beachten, dass
bereits vorhandene gleichnamige Dateien durch
die später verschobenen
überschrieben werden - insoferne
wäre eine Namenskonvention, etwa durch
Voranstellen von zB "2007_11_" vor
den Dateinamen, zu überlegen.

Die Dateien sind schon so beschriftet, mit diesem Problem werde ich auch noch kommen, da die .OK-Dateien noch ausgelesen werden müssen, doch das werde ich erst mal selbst probieren und ich muss noch mehr Infos über die Ordnerstruktur bekommen.

Danke euch beiden für die top Hilfe, ich hab schon einiges gelernt jetzt!
Bitte warten ..
Mitglied: bastla
26.11.2007 um 13:01 Uhr
Hallo tob1as!

Sollte eigentlich so gehen:
01.
for /R "D:\WORK\Rechnungstool\BatchFiles" %i in ("*.OK") do type "%i">>"D:\WORK\Rechnungstool\BatchFiles\Test.txt" & echo.>>"D:\WORK\Rechnungstool\BatchFiles\Test.txt"
Grüße
bastla
Bitte warten ..
Mitglied: tob1as
26.11.2007 um 13:25 Uhr
Hallo tob1as!

Sollte eigentlich so gehen:
01.
for /R 
02.
> "D:\WORK\Rechnungstool\BatchFiles" 
03.
> %i in ("*.OK") do type 
04.
> "%i">>"D:\WORK\Rechnungstool\BatchFiles\Test.txt" 
05.
> & 
06.
> echo.>>"D:\WORK\Rechnungstool\BatchFiles\Test.txt" 
07.
> 


So schreibt die Batch am Ende des Files immer noch einen Punkt.
Aber habs nun automatisch irgendwie geschafft, danke euch 2 für die Hilfe, mein nächstes Problem kommt bestimmt bald

FAZIT:


Hab nun mein Problem folgendermassen gelöst:

01.
set "File=D:\WORK\Rechnungstool\BatchFiles\daten.txt" 
02.
set "Pfad=D:\WORK\Rechnungstool\BatchFiles" 
03.
 
04.
if exist "%File%" del "%File%" 
05.
 
06.
for /R "%Pfad%" %%i in ("*.OK") do type "%%i">>"%File%" 
07.
 
Bitte warten ..
Mitglied: Biber
26.11.2007 um 15:47 Uhr
Moin tob1as,

mein nächstes Problem kommt bestimmt bald
Jederzeit wieder gerne... dass wir auch diese Kuh vom Eis bekommen haben, lag ja auch mit an Deiner Mitarbeit und Deinem Feedback.

So schreibt die Batch am Ende des Files immer noch einen Punkt.
Das kann eigentlich nur dann passieren, wenn zwischen "echo" und dem "." ein Leerzeichen steht.
Das von bastla verwendete Special "echo.>>whereEver.xyz", also ein "Echo" direkt gefolgt von wahlweise einem "." oder "\" oder "?" ermöglicht es, nur ein CRLF/einen Zeilenvorschub/eine leere Zeile zu posten.
Siehst Du ganz oft bei geECHOted Batchmenüs, die aus ästhetischen Gründen ein paar Leerzeilen beeinhalten.
Beispiel:
01.
.... 
02.
echo Menü 
03.
echo. 
04.
echo. 
05.
echo Auswahl A 
06.
echo. 
07.
echo Auswahl B 
08.
....
Da dieses Zeichen dirkt nach "echo" NICHT mit ausgegeben wird, kann es auch nicht am Ende Deiner Datei ankommen.

Grüße
Biber
Bitte warten ..
Mitglied: tob1as
03.12.2007 um 07:54 Uhr
Guten Morgen allerseit

Nun bin ich bei meinem nächsten Problem:

Mein bisheriges Batch-File soll erweitert werden!

01.
  
02.
@echo off 
03.
set "File=D:\WORK\Rechnungstool\BatchFiles\daten.txt" 
04.
set "Pfad=D:\WORK\Rechnungstool\BatchFiles" 
05.
@echo off 
06.
if exist "%File%" del "%File%" 
07.
 
08.
cls 
09.
echo. 
10.
echo Gespraechstdaten werden jetzt in die "%File%"  
11.
echo eingelesen. 
12.
echo. 
13.
echo Bitte warten. . . 
14.
 
15.
@echo off 
16.
for /R "%Pfad%" %%i in ("*.OK") do type "%%i">>"%File%"
Es ändert sich der Pfad, er ist jetzt nämlich "X:\PROJECTS\XXX\BDV_TK".

Das Problem ist, dass das Batchfile aus diesem Ordner nur auf die Unterordner zugreifft, bzw. aus ihnen die Daten zusammenfügt, welche GEBUEHREN-2007-10/OK also GEBUEHREN-jahr-monat/OK aufgebaut sind und nicht anders, obwohl sich in anderen Ordnern innerhalb von "X:\PROJECTS\XXX\BDV_TK" auch solche .OK Dateien befinden können.

Ich hoffe ich hab mich einigermassen verständlich ausgedrückt und würde mich echt freuen, wenn mir jemand helfen könnte!

Lieber Gruss

Tobias
Bitte warten ..
Mitglied: Biber
03.12.2007 um 08:20 Uhr
Moin tob1as,

dann musst Du außer dem %Pfad% selbst noch die letzte Zeile ändern:

01.
... 
02.
 
03.
for /R "%Pfad%" %%i in ("*.OK") do echo %%~pi|find /i "GEBUEHREN-">nul && type "%%i">>"%File%"
Grüße
Biber
Bitte warten ..
Mitglied: tob1as
03.12.2007 um 08:38 Uhr
dann musst Du außer dem %Pfad% selbst
noch die letzte Zeile ändern:

01.
... 
02.
>  
03.
> for /R "%Pfad%" %%i in 
04.
> ("*.OK") do echo %%~pi|find /i 
05.
> "GEBUEHREN-">nul && type 
06.
> "%%i">>"%File%" 
07.
> 

Wenn du nicht so weit weg wohnen würdest, würde ich heute Abend mit dir ein paar Bier trinken, ich bin dir echt super dankbar! Batch-Gott

Mein Projekt ist jetzt fertig, ich hoffe ich hab jetzt mal für ne Weile keine Probleme hier, wenn ich dir irgendwie helfen kann (bei PHP und TYPO3 bin ich nich ganz so übel (; ) schreibst mir ne Mail oder hier ne PN!

Lieber Gruss

Tobias
Bitte warten ..
Mitglied: Biber
03.12.2007 um 08:50 Uhr
Moin tob1as,

Wenn du nicht so weit weg wohnen würdest, würde ich heute Abend mit dir ein paar Bier trinken
Na ja, Bier oder Fussball nach Bremen tragen, wo es Becks und Werder gibt... das ist nett gemeint, aber eigentlich nicht nötig...

Aber wenn Du so einen kleinen grünen Haken oben am Thread anbringen könntest,
das wäre schon mehr, als ich normalerweise von einem Montagmorgen erwarte....

Grüße zurück
Biber
Bitte warten ..
Mitglied: tob1as
04.12.2007 um 10:58 Uhr
01.
  
02.
> @echo off 
03.
> set 
04.
> "File=D:\WORK\Rechnungstool\BatchFiles\daten.txt" 
05.
> set 
06.
> "Pfad=D:\WORK\Rechnungstool\BatchFiles" 
07.
> @echo off 
08.
> if exist "%File%" del 
09.
> "%File%" 
10.
>  
11.
> cls 
12.
> echo. 
13.
> echo Gespraechstdaten werden jetzt in die 
14.
> "%File%"  
15.
> echo eingelesen. 
16.
> echo. 
17.
> echo Bitte warten. . . 
18.
>  
19.
> @echo off 
20.
> for /R "%Pfad%" %%i in 
21.
> ("*.OK") do type 
22.
> "%%i">>"%File%"
Es ändert sich der Pfad, er ist jetzt
nämlich
"X:\PROJECTS\XXX\BDV_TK".

Das Problem ist, dass das Batchfile aus
diesem Ordner nur auf die Unterordner
zugreifft, bzw. aus ihnen die Daten
zusammenfügt, welche
GEBUEHREN-2007-10/OK also
GEBUEHREN-jahr-monat/OK aufgebaut sind und
nicht anders, obwohl sich in anderen Ordnern
innerhalb von
"X:\PROJECTS\XXX\BDV_TK" auch
solche .OK Dateien befinden können.

Hallo zusammen

Ich hab ein neues Problem(ist ja mal nichts neues..)

Auf jeden Fall hab ich mir das Text-File mal angesehen, welches mir die Batch erstellt, und einen krassen Fehler entdeckt.

Die Ordnerstruktur sieht folgendermassen aus:


GEBUEHREN-2007-10
- OK
.
.
.
GEBUEHREN-2009_12
- OK

GeschJahr2003
- OK
.
.
.
GeschJahr2006
-GEBUEHREN-200x-xx
- OK

Jetzt soll die Batch nur diejenigen Files aus den OK-Ordnern auslesen bei welcher der Ordner nicht GeschJahr200x ist, sprich nur diejenige nehmen aus den GEBUEHREN-200x usw.

Das Problem in meiner momentanen Batch ist, dass sie rekursiv nach allen GEBUEHREN Ordner sucht, und diejenigen OK-Dateien im GeschJahr200x_xx/GEBUEHREN auch einschliesst.

Das Problem ist, dass in den GeschJahr200x_xx/ -Ordnern auch Ordner in der Form von GEBUEHREN-200x vorkommen, die Batch sollte also nur in die oberste Ebene gehen, dort die .OK Dateien zusammenfügen, und NICHT in die GeschJahr200x_xx reingehen.

Das Text-File wird sonst 2GB gross!


Wäre super wenn mir hier jemand helfen könnte bei der genauen Zuweisung...blick langsam nicht mehr durch!


Lieber Gruss

Tobias
Bitte warten ..
Mitglied: tob1as
10.12.2007 um 07:46 Uhr
Hallo zusammen
Weiss wirklich niemand Rat? Habe letzte Woche MI,DO und FR damit verbracht eine Lösung zu finden doch leider funktionierte nichts

Lieber Gruss

Tobias

So sieht die Batch momentan aus:

01.
@echo off 
02.
set "File=J:\x\daten.txt" 
03.
set "Pfad=J:\PROJECTS\x\" 
04.
@echo off 
05.
if exist "%File%" del "%File%" 
06.
 
07.
cls 
08.
echo. 
09.
echo Gespraechsdaten werden jetzt in die "%File%"  
10.
echo eingelesen. 
11.
echo. 
12.
echo Bitte warten. . . 
13.
 
14.
@echo off 
15.
for /R "%Pfad%" %%i in ("*.OK") do echo %%~pi|find /i "GEBUEHREN-">nul && type "%%i">>"%File%" 
16.
 
17.
cls 
18.
echo. 
19.
COLOR 0E 
20.
echo Gespraechsdaten sind jetzt fertig eingelesen. 
21.
echo. 
22.
echo. 
23.
echo. 
24.
echo. 
25.
echo Druecken Sie eine beliebige Taste um die Berechnung abzuschliessen! 
26.
pause > NUL
Bitte warten ..
Mitglied: Biber
10.12.2007 um 20:09 Uhr
Moin tob1as,

ich bin nicht sicher, ob ich das Problem richtig verstehe, bzw. wasa so kompliziert daran ist.

Falls ich es richtig verstanden habe, wäre die Situation sinngemäß so, wie ich sie hier nachgebildet habe:
01.
>dir /b /s *.ok 
02.
D:\temp\test\Gebuehren-2007-01\22140.ok 
03.
D:\temp\test\Gebuehren-2007-02\10406.ok 
04.
D:\temp\test\Gebuehren-2007-03\24201.ok 
05.
D:\temp\test\gj2003\Gebuehren-2003-02\10984.ok
...und den 4.Fall, also das Unterverzeichnis "Gebuehren-2003-02", welches nicht direkt unter dem Pfad liegt,
in dem "normalerweise" die "Gebuehren-2007-xx\*.Ok-Dateien liegen, den willst Du NICHT haben?

Das wäre doch dann nur:
01.
>set pfad=d:\temp\test 
02.
### erst die bisherige Zeile von oben: 
03.
>for /R "%pfad%" %i in ("*.OK") do @echo %~pi|find /i "GEBUEHREN-" 
04.
\temp\test\Gebuehren-2007-01\ 
05.
\temp\test\Gebuehren-2007-02\ 
06.
\temp\test\Gebuehren-2007-03\ 
07.
\temp\test\gj2003\Gebuehren-2003-02\ 
08.
 
09.
## die Variable %~pi (nur Pfad) auf %~dpi (Lw+Pfad) oder %i (ganzer Pfad/Dateiname) erweitern. 
10.
>for /R "%pfad%" %i in ("*.OK") do @echo %~dpi|find /i "%pfad%\GEBUEHREN-" 
11.
d:\temp\test\Gebuehren-2007-01\ 
12.
d:\temp\test\Gebuehren-2007-02\ 
13.
d:\temp\test\Gebuehren-2007-03\ 
14.
 
15.
## und %pfad% muss unmittelbar vor "GEBUEHREN-...." stehen. 
16.
## Dann werden nur die drei statt vier Verzeichnisse angezeigt/angezogen.
Oder habe ich jetzt die Verzeichnisstruktur missverstanden?

Grüße
Biber
Bitte warten ..
Mitglied: tob1as
11.12.2007 um 07:42 Uhr
Hallo Biber
Danke für deine Antwort. Du hast die Situation genau richtig verstanden! Mir wird auch immer klarer wie es funktioniert, doch irgendwie wills noch nicht so funktionieren, dass es diese .OK-Files dann auch noch in mein Text-File schreibt so wie vorher!

Hier mal meine Batchdatei(neu):

01.
@echo off 
02.
set "File=J:\Rechnungstool\Daten\daten.txt" 
03.
set "Pfad=J:\PROJECTS\" 
04.
@echo off 
05.
if exist "%File%" del "%File%" 
06.
 
07.
cls 
08.
echo. 
09.
echo Gespraechsdaten werden jetzt in die "%File%"  
10.
echo eingelesen. 
11.
echo. 
12.
echo Bitte warten. . . 
13.
 
14.
@echo off 
15.
 
16.
for /R "%Pfad%" %i in ("*.OK") do @echo %~dpi|find /i "%Pfad%\GEBUEHREN-" 
17.
J:\PROJECTS\Gebuehren-2007-01\ 
18.
J:\PROJECTS\Gebuehren-2007-02\ 
19.
J:\PROJECTS\Gebuehren-2007-03\ 
20.
J:\PROJECTS\Geschaeftsjahr-2005\Gebuehren-2003-02\ 
21.
>nul && type "%%i">>"%File%" 
22.
 
23.
cls 
24.
echo. 
25.
COLOR 0E 
26.
echo Gespraechsdaten sind jetzt fertig eingelesen. 
27.
echo. 
28.
echo. 
29.
echo. 
30.
echo. 
31.
echo Druecken Sie eine beliebige Taste um die Berechnung abzuschliessen! 
32.
pause > NUL

Irgendwie muss ich den Teil noch ändern, wo die betreffenden Verzeichnisse gewählt werden, aus welchen Dateien ausgelesen werden, und aus welchen nicht, doch genau das funktioniert noch nicht.

Lieber Gruss

Tobias
Bitte warten ..
Mitglied: Biber
11.12.2007 um 10:50 Uhr
Moin tob1as,

vielleicht habe ich mich missverständlich ausgedrück...das Testen, das ich gestern am CMD-Prompt gemacht habe, sollte nicht 1:1 in die Batch.

Wenn schon, dann:
01.
.... 
02.
for /R "%Pfad%" %%i in ("*.OK") do @echo %%~dpi|find /i "%Pfad%\GEBUEHREN-">nul && type "%%i">>"%File%" 
03.
...
...statt der 5 Zeilen, vordie ich sicherheitshalber eine Kommentar-Marke gesetzt habe.
01.
... 
02.
REM for /R "%Pfad%" %%i in ("*.OK") do @echo %%~dpi|find /i "%Pfad%\GEBUEHREN-" 
03.
REM J:\PROJECTS\Gebuehren-2007-01\ 
04.
REM J:\PROJECTS\Gebuehren-2007-02\ 
05.
REM J:\PROJECTS\Gebuehren-2007-03\ 
06.
REM J:\PROJECTS\Geschaeftsjahr-2005\Gebuehren-2003-02\ 
07.
REM  && type "%%i">>"%File%"
Grüße
Biber
Bitte warten ..
Mitglied: tob1as
11.12.2007 um 12:47 Uhr
Hallo Biber

Merci für deine Hilfe

Ich verstehe nicht, weshalb du das gecodet hast:
01.
REM J:\PROJECTS\Gebuehren-2007-03\ 
02.
REM J:\PROJECTS\Geschaeftsjahr-2005\Gebuehren-2003-02\
Wie erkennt die Batch hier, dass sie in den Geschäftsjahrordner nicht gehen soll bzw. aus ihm keine Dateien holen?


Habs jetzt so versucht, und es schreibt nun kein txt-File mehr:

01.
for /R "%Pfad%" %i in ("*.OK") do @echo %~dpi|find /i "%Pfad%\GEBUEHREN-" 
02.
J:\PROJECTS\x\GEBUEHREN-2007-10\ 
03.
J:\PROJECTS\x\GEBUEHREN-2007-11\ 
04.
J:\PROJECTS\x\Geschaeftsjahr-2005\GEBUEHREN-2003-02\ 
05.
&& type "%%i">>"%File%"
Gruss Tobias
Bitte warten ..
Mitglied: Biber
11.12.2007 um 13:08 Uhr
Moin tob1as,

es geht jetzt durcheinander mit CMD-Prompt/Batchversion und Testen/Echteinsatz.

Für Batch (alle Zählvariablen wie z.B %i) mit ZWEI"%%"-Prozentzeichen schreiben.

DIESE EINE FOLGENDE ZEILE sollte in Deine Batchdatei ANSTATT der 5 oder 6 Zeilen, die Deine FOR-Anweisung jetzt lang ist.

01.
.... 
02.
for /R "%Pfad%" %%i in ("*.OK") do @echo %%~dpi|find /i "%Pfad%\GEBUEHREN-">nul && type "%%i">>"%File%" 
03.
...
Mehr erstmal nicht, dann sehen wir weiter,

Grüße
Biber
Bitte warten ..
Mitglied: tob1as
11.12.2007 um 13:20 Uhr
Hallo Biber

So erstellts die Textdatei mit allen OK-Daten.
01.
for /R "%Pfad%" %%i in ("*.OK") do echo %%~dpi|find /i "GEBUEHREN-">nul && type "%%i">>"%File%"
Doch leider besteht das Problem mit dem Geschäftsjahr immer noch, und ich verlier langsam den Überblick, wie man das lösen kann!

Ganz lieber Gruss

Tobias
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Batch & Shell
gelöst Per Batch Dateien in einen Ordner - ext. Festplatte übertragen (2)

Frage von tocksick zum Thema Batch & Shell ...

Windows Server
Zuordnung von Netzlaufwerken mit Hilfe von Batch-Dateien (4)

Frage von doc-jochim zum Thema Windows Server ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (21)

Frage von Xaero1982 zum Thema Microsoft ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...

Windows Update
Treiberinstallation durch Windows Update läßt sich nicht verhindern (17)

Frage von liquidbase zum Thema Windows Update ...