mado
Goto Top

Batch Datei und Zähler

Hallo,

ich benötige für eine Batch Datei einen Zähler der folgendes macht.

Hintergrund:
Jeden Tag werden 5 Dateien in einen Ordner für einen Filetransfer zur Verfügung gestellt. Die Dateien sind ab.txt , cd.txt, ef.txt etc...
Diese werden dann umbenannt in ab01.txt, cd01.txt etc...

Nun werden manchmal an einem Tag zwei oder mehrere von diesen Dateien erzeugt. Hierbei soll nun geprüft werden ob die Datei ab01.txt schon existiert, und wenn ja die umbennung in ab02.txt erfolgen. Diese soll natürlich für den Wertebereich 01 - 99 möglich sein.

Nun möchte ich natürlich nicht jede Datei mit If exist ab01.txt rename ab02.txt prüfen sondern dass Ganze über eine Schleife oder ähnliches lösen/automatisieren

Hat jemand dazu einen Tip?

Content-ID: 17431

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

Ausgedruckt am: 23.11.2024 um 00:11 Uhr

pasman
pasman 09.10.2005 um 16:18:45 Uhr
Goto Top
Hallo

schau dir mal FOR an


FOR /L %Variable IN (Start,Schritt,Ende) DO Befehl [Parameter]

Der Satz ist eine Folge von Zahlen von Start bis Ende und der
angegebenen Schrittweite. So erzeugt (1,1,5) die Folge 1 2 3 4 5 und
(5,-1,1) erzeugt die Folge (5 4 3 2 1).
Biber
Biber 09.10.2005 um 17:14:17 Uhr
Goto Top
@pasman

Dem kann ich eigentlich nur wenig hinzufügen. Ich schaff das immer nicht, mich so kurz zu fassen.

In epischer Breite ausformuliert würde das sinngemäß so aussehen können:
::
 ---------snipp copyCountedNames.bat
@echo off & setlocal
Set "AllMyFiles=ab cd ef gh ij"  
Set SrcFolder="Z:"  
Set TargetFolder="Z:\temp"  
For %%i in (%AllMyFiles%) do (
    if exist %SrcFolder%\%%i.txt call :copyAsNewName %%i
)
goto :eof 

:copyAsNewName
Set "NewName="  
for /L %%a in (1,1,9) do (
      if not defined NewName if not exist %TargetFolder%\%10%%a.txt set "NewName=%10%%a.txt"  
)
for /L %%a in (10,1,99) do (
if not defined NewName if not exist %TargetFolder%\%1%%a.txt set "NewName=%1%%a.txt"  
)
echo Hier käme ein copy %SrcFolder%\%1.txt %TargetFolder%\%NewName%
goto :eof
::---------snapp copyCountedNames.bat

Test: (im SrcFolder existieren ab.txt und cd.txt; im TargetFolder ab01.txt und ab02.txt)
Z:\>
CopyCountedNames.bat
Hier käme ein copy "Z:"\ab.txt "Z:\temp"\ab03.txt
Hier käme ein copy "Z:"\cd.txt "Z:\temp"\cd01.txt

Das war vermutlich das, was Du auch meintest.

Grüße
Biber
mado
mado 10.10.2005 um 09:03:10 Uhr
Goto Top
Hallo,

erst mal danke bei mir funktioniert das Ganze aber nicht so.
Hier mal meine batch.

REM ERSTELLE DATUM
@echo off
for /F "tokens=6,7,9" %%i IN ('showclok -c') DO (
set DT_MON=%%i
set DT_DAY=%%j
set DT_YEAR=%%k)
set WOCHENTAG=%DT_YEAR%-%DT_MON%-%DT_DAY%

REM Umbennenen
RENAME F:\Ausgang\AB.TXT AB%WOCHENTAG%.TXT
RENAME F:\Ausgang\CE.TXT CE%WOCHENTAG%.TXT

REM ZIPPE die DATEIEN
c:\Programme\WinZip\wzzip.exe F:\Ausgang\AB%WOCHENTAG%.zip F:\Ausgang\AB%WOCHENTAG%.TXT
c:\Programme\WinZip\wzzip.exe F:\Ausgang\CE%WOCHENTAG%.zip F:\Ausgang\CE%WOCHENTAG%.TXT

KOPIERE ES ZUM VERSAND
xcopy "F:\Ausgang\AB%WOCHENTAG%.zip" F:\Versand\
xcopy "F:\Ausgang\CE%WOCHENTAG%.zip" F:\Versand\


FOR %%A IN (F:\Ausgang\*.*) DO DEL %%A

Also ich sollte vor dem umbennen die Schleife einbauen. Leider bekomme ich nur Fehlermeldungen!
Was mache ich da falsch?
Biber
Biber 10.10.2005 um 09:54:08 Uhr
Goto Top
Hm, Mado,

das scheint aber eine geringfügig andere Zielsetzung zu sein als in Deiner Anforderung oben.... *ggg

Ich weiß ja nicht genau, wo und was für Fehlermeldungen kommen - ich vermute mal, die kommen an der Stelle "Rename..." , falls schon gleichnamige Dateien da sind?

Kommentier doch kurz das "@Echo off" aus, damit Du etwas siehst.
Und ebenfalls erstmal auskommentieren würde ich die letzte Zeile (Quelldateien löschen).

Biber
mado
mado 10.10.2005 um 10:33:34 Uhr
Goto Top
Hallo beim ausführen der Anweisung
For %%i in (%AllMyFiles%) do (if exist %SrcFolder%\%%i.txt call :copyAsNewName %%i)

stimmt die Dateinabgabe nicht richtig %SRCFOlder% kommt mit Leerstelle an und anschliessend die Fehlermeldung der Befehel %AllMYFiles% ist falsch geschrieben.
Biber
Biber 10.10.2005 um 11:16:02 Uhr
Goto Top
Tja, Mado,

<s>beim Setzen von %Newname% war ein führendes Leerzeichen zuviel. Sorry.
Hab ich oben auch eingefügt (set "NewName=%Newname:~1%").</s>

Mit den anderen Fehlermeldungen kann ich nichts anfangen (nicht reprozierbar bei mir).

Sollte ja auch nur eine Skizze sein.

Hast Du sonst noch Änderungen in meiner Skizze gemacht?

Biber
mado
mado 10.10.2005 um 11:37:41 Uhr
Goto Top
soweit so gut
nun läuft alles bis zum Kopiervorgang durch, wenn ich das :EOF auskommentiere und bricht dann mit einer ungültigen Parameteranzahl ab.
Der Fehler muss irgendwo im Befehl copy liegen?!
Hier die batch:

Set "AllMyFiles=ab cd ef gh ij"
Set SrcFolder=C:\TEST\AUSGANG
Set TargetFolder=C:\TEST\VERSAND

For %%i in (%AllMyFiles%) do (
if exist "%SrcFolder%\%%i.txt" call :copyAsNewName %%i
)
rem goto :eof
pause
:copyAsNewName
set "NewName=%Newname:%1%"

for /L %%a in (1,1,9) do (
if not defined NewName if not exist %TargetFolder%\%10%%a.txt set "NewName=%10%%a.txt"
)
for /L %%a in (10,1,99) do (
if not defined NewName if not exist %TargetFolder%\%1%%a.txt set "NewName=%1%%a.txt"
)
pause
xcopy %SrcFolder%\%1.txt %TargetFolder%\%NewName%
pause
goto :eof
Biber
Biber 10.10.2005 um 12:47:52 Uhr
Goto Top
Moin, mado,

der Fehler liegt hier:

Set SrcFolder=C:\TEST\AUSGANG
Set TargetFolder=C:\TEST\VERSAND

...da hast Du ein Leerzeichen zuviel (am Ende der Zeile).
Wird also interpretiert als
Set "SrcFolder=C:\TEST\AUSGANG "
Set "TargetFolder=C:\TEST\VERSAND "

Richtiger wäre, wenn Du es in Anfü-Zeichen setzt (auch wenn es bei M$ nicht dokumentiert ist, vertrau mir... *gg), also:
Set "SrcFolder=C:\TEST\AUSGANG"
Set "TargetFolder=C:\TEST\VERSAND"

Hand
Biber