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 Zählerfunktion in Batch Datei

Mitglied: MacLeod

MacLeod (Level 1) - Jetzt verbinden

12.03.2006, aktualisiert 13.03.2006, 9778 Aufrufe, 16 Kommentare

Sortieren von Dateien

Hallo.
Ich stehe vor einem für euch wahrscheinlich trivialen Problem. Eingehende Dateien auf einem FTP (lokal) sollen anhand von einem String in der Datei in entsprechende Unterverzeichnisse verschoben/kopiert werden. Habe hier schon etwas umhergelesen und einen Teilerfolg erzielt:
del temp.txt
SET LAUFN=0001
dir k:\_incoming\ /s /b |find "%LAUFN%" > temp.txt
FOR /f "eol=; tokens=1,2* delims=," %%i IN (temp.txt) DO @xcopy "%%i" k:\test\%LAUFN%\ /y
Nun soll dieser Ablauf aber mehrmals durchgeführt werden und zwar mit 0001, 0002, 0003 und so weiter. Ideal wäre die Angabe über Startnummer/Schrittweite/Endnummer. Duchläufe gehen bis zu 100.000 Der Zeitaspekt ist aber Nebensache.
Mein Betriebssystem ist Win2003SP1 und bei den Datein handelt es sich um reine Binärdateien, kein Text oder ähnliches.
Ich bin für jeden Tipp dankbar.
Gruß,
Peter
Mitglied: stpe
12.03.2006 um 20:59 Uhr
Leider können Batch-Dateien nicht rechnen oder zählen. Eine Lösung ist über einen kleinen Umweg möglich:

Lege eine Datei an, in der alle laufenden Zahlen Zeile für Zeile stehen, also:
<font class="code">0001
0002
0003
...</font>
Dann kannst Du diese Datei in einer For-Schleife "durchzählen" lassen:

<font class="code">for /F %%z in (nummern.txt) do for FOR /f "eol=; tokens=1,2* delims=," %%i IN (temp.txt) DO @xcopy "%%i" k:\test\%z%\ /y</font>

Ich hoffe, ich konnte helfen.
Stefan
Bitte warten ..
Mitglied: MacLeod
12.03.2006 um 21:10 Uhr
Hmmm. Für kleinere Zahlenbereiche ist diese Idee optimal. Aber bei bis zu 100000 Zahlen recht mühsam. Außer ich bastel mir ein Script, welches diese Nummerndatei automatisch erzeugt.
Vielen Dank erstmal.
Gruß,
Peter

Edit: Funktioniert leider nicht. Denn erst wird anhand der Such-Zahl die Liste der betreffenden Dateien gebildet (temp.txt) und dann kopiert. Mit einer neuen Such-Zahl muss auch wieder erst eine neue temp.txt erstellt werden. Ich glaube ich bräuchte eine echte Schleife in der Batch selbst.
So etwa:

:Start
Laufnummer = Laufnummer +1
Prüfe ob Laufnummer = Endnummer dann GOTO :EXIT
Konvertiere Laufnummer zu Laufvariable
"Kopierfunktion komplett"
GOTO :START
: EXIT
Bitte warten ..
Mitglied: stpe
12.03.2006 um 21:37 Uhr
Auf der Linux-Bash kann man zählen ;)

Nimm diese: link nicht mehr verfuegbar
Gruss
Stefan
Bitte warten ..
Mitglied: stpe
12.03.2006 um 21:46 Uhr
Hatte Deinen Edit gerade erst gelesen.

Integrier die Erstellung der temp.txt mit Deiner for-Schleife in eine Sub-Routine. Diese lässt Du von der "Ich zähl bis 100.000"-Schleife immer anspringen.

Habe gerade leider kein Windows zur Verfügung, aber das Konstrukt koennte dann in etwa so aussehen:

<font class="code">for /F %%z in (nummern.txt) do call :kopieren
goto ende

:kopieren
dir k:\_incoming\ /s /b |find "%z%" > temp.txt
FOR /f "eol=; tokens=1,2* delims=," %%i IN (temp.txt) DO @xcopy "%%i" k:\test\%z%\ /y
return

:ende</font>
Bitte warten ..
Mitglied: djbrandt
12.03.2006 um 21:56 Uhr
Hi,

mit set /A läßt sich bei XP rechnen

Die /A-Option gibt an, dass die Zeichenfolge rechts vom Gleichheitszeichen
ein nummerischer Ausdruck ist, der ausgewertet wird. Das Auswertungsprogramm
des Ausdrucks unterstützt dabei die folgenden Vorgänge, entsprechend ihrer
Anordnung mit abnehmendem Vorrang:

() - Gruppierung
! ~ - - monäre Operatoren
          • / % - arithmetische Operatoren
          + - - arithmetische Operatoren
          << >> - logische Verschiebung
          & - bitweise UND
          ^ - bitweise exklusives ODER
          | - bitweise ODER
          = *= /= %= += -= - Zuordnung
          &= ^= |= <<= >>=
          , - Trennzeichen für Ausdrücke


          Damit kannst Du Deine Schleifen bauen

          set /A bla=1
          1
          set /a bla=%bla%+1
          2
          echo %bla%
          2
          set /a bla=%bla%+1
          3
          echo %bla%
          3


          Gruß

          Dieter
Bitte warten ..
Mitglied: MacLeod
12.03.2006 um 21:58 Uhr
Prima.
Das probiere ich morgen früh gleich mal.
Vielen Dank,
Peter
Bitte warten ..
Mitglied: stpe
12.03.2006 um 22:04 Uhr
Habe nie mit XP gearbeitet, vorher ging das nicht. Man lernt immer dazu.

Danke und 5 Sternchen dafür

Gruss
Stefan
Bitte warten ..
Mitglied: Biber
12.03.2006 um 22:49 Uhr
Hmm,
Im Batch lässt sich schon hochzählen und rechnen.

Und wie man/frau aus einer Zählvariablen (1,2,3...) einen formatierten Text macht ("0001", "0002", ..) hab ich u.a. in dem Batch-Tut II ("Ein bisschen Handwerkszeug..") beschrieben.

Aber die Mimik selbst ist mir bei Dir noch nicht klar, MacLeod.
Bei Dir sind im Incomingverzeichnis immer Dateien, die ein "0058"..."0077", "0013" im Namen haben? Oder wie muss ich mir das vorstellen?

Rückfragend
Biber
Bitte warten ..
Mitglied: MacLeod
12.03.2006 um 23:11 Uhr
Hallo.
Die Dateien haben den String leider nicht im Namen sondern im Binärcode. Der Dateinamen kann irgendeine beliebige Form und Endung haben.
Gruß,
Peter
Bitte warten ..
Mitglied: Schirrmeister
13.03.2006 um 08:24 Uhr
Will doch auch meinen Senf dazugeben...
Du sagst, Du brauchst die Zählernummer mit führenden Nullen, dann würde ich die äußere Zählerschleife so machen:
01.
setlocal enableextensions 
02.
 
03.
for /L %%i in ( 1, 1, 100000 ) do ( 
04.
&nbsp;&nbsp;&nbsp;&nbsp;set LAUFN=00000%%i 
05.
&nbsp;&nbsp;&nbsp;&nbsp;set LAUFN=!LAUFN:~-6! 
06.
&nbsp;&nbsp;&nbsp;&nbsp;... 
07.
08.
 
09.
endlocal
Die Ausrufezeichen (statt %) sind nötig, damit die Variable jedesmal neu ausgewertet wird, dafür ist auch das enableextensions.
Bei der weiteren Verwendung mußt Du dann auch !LAUFN! schreiben, statt %LAUFN%.
Bitte warten ..
Mitglied: MacLeod
13.03.2006 um 14:33 Uhr
Hallo.
Ich bekomme es nicht hin. Er zählt zwar durch was man am set LAUFN... noch sieht, aber mit echo bekomme ich nie etwas angezeigt. Und auch beim dir/find steht dann nichts drin. Habe alle möglichen Variationen durchprobiert. Hat noch jemand eine Idee?
Danke,
Peter

setlocal enableextensions
for /L %%k in ( 1, 1, 10 ) do (
del temp.txt
set LAUFN=00000%%k
set LAUFN=!LAUFN:~-6!
echo !%LAUFN%
dir k:\_incoming\ /s /b |find "!LAUFN!" > temp.txt
FOR /f "eol=; tokens=1,2* delims=," %%i IN (temp.txt) DO @xcopy "%%i" k:\test\%LAUFN%\ /y
)
Bitte warten ..
Mitglied: Biber
13.03.2006 um 14:59 Uhr
Moin MacLeod,

das sind ja zweieinhalb Probleme, die da drin sind.
1) die formale Syntax
2) die "0000x" im Binärcode statt im Namen
2,5) die Fehlermeldung, wenn keine Datei mit "0000x" gefunden (das halbe Problem)

ad 1) So ist es formal richtig (mit der LAUFN-Variable; Rest ausgeREMt):
01.
 @echo off & setlocal enabledelayedexpansion 
02.
for /L %%k in ( 1, 1, 10 ) do (  
03.
    rem echo del temp.txt  
04.
    set "LAUFN=00000%%k" 
05.
    set "LAUFN=!LAUFN:~-6!"  
06.
    echo !LAUFN! 
07.
    rem dir k:\_incoming\ /s /b 2>nul |find "!LAUFN!" >temp.txt  
08.
    rem FOR /f "eol=; tokens=1,2* delims=," %%i IN (temp.txt) DO @xcopy "%%i" k:\test\%LAUFN%\ /y  
09.
)  
ad 2)
mit dem "DIR K:\incoming /s /b .." werden Dir doch nur Dateinamen geliefert.
Wenn das "0000x" aber in den Dateien selbst enthalten ist, musst Du auch die Dateien selbst mit Find durchsuchen.
Und abhängig von "Gefunden"=Errorlevel 0 bzw. Errorlevel 1 ="nicht gefunden" diese Datei kopieren.

ad 2,5)
dir k:\_incoming\ /s /b 2>nul |find "!LAUFN!" >temp.txt
...mit 2>nul die DIR-Nicht-gefunden-Meldung entsorgen


Gruß
Biber
Bitte warten ..
Mitglied: Schirrmeister
13.03.2006 um 15:01 Uhr
Dein echo ist ja auch nicht korrekt, ich sagte doch, Du musst dann IMMER ! nehmen.
Wenn Du %LAUFN% hinschreibst, wird das ausgewertet, bevor die Schleife ausgeführt wird, und da ist die Variable noch nicht gesetzt.
Bitte warten ..
Mitglied: MacLeod
13.03.2006 um 15:27 Uhr
Stimmt. Ihr habt natürlich recht!
Er sucht nur in Dateinamen. Habe vor lauter Bäumen den Wald nicht mehr gesehen.
Also müsste ich erst das Dir in eine Liste -> jede Datei nach String durchsuchen und bei Treffer ab in eine zweite Liste -> Kopieren.
Jetzt überlege ich, ob man das Problem nicht besser in einem echten Compiler aufdröselt. Das altbewährte Powerbasic wäre wohl ideal dafür. Da kann ich dann auch schneller mehr Schicki-micki einbauen, wenn mir noch etwas einfällt.
Ich danke euch allen erst mal ganz herzlich.
Gruß,
Peter
Bitte warten ..
Mitglied: MacLeod
13.03.2006 um 21:09 Uhr
Erfolg!
Es geht auch ohne Powerbasic:

@echo off & setlocal enabledelayedexpansion
for /L %%k in ( 1, 1, 5 ) do (
del temp.txt
set "LAUFN=00000%%k"
set "LAUFN=!LAUFN:~-6!"
echo !LAUFN!
FINDSTR /s /m /C:"!LAUFN!" k:\_incoming\*.* > temp.txt
FOR /f "eol=; tokens=1,2* delims=," %%i IN (temp.txt) DO @xcopy "%%i" k:\test\!LAUFN!\ /y /f /r
)
endlocal
pause

Danke nochmal,
Peter
Bitte warten ..
Mitglied: Biber
13.03.2006 um 21:31 Uhr
Glückwunsch, MacLeod,

nur für die kommenden Jahre der Pflege und Wartung Deines Batches (weil Du bestimmt in drei Monaten nicht mehr weißt, ob da alle Schalter einen Sinn machen):


...
FINDSTR /s /m /C:"!LAUFN!" k:\_incoming\*.* > temp.txt
... geht in diesem Fall sicher besser als mit Find.exe.
Der Befehl würde auch Dateien mit Leerzeichen oder mit Kommata im Namen finden.

---> Dann aber muss der FOR-Befehl die auch entgegennehmen wollen:

Bisher:
FOR /f "eol=; tokens=1,2* delims=," %%i IN (temp.txt) DO @xcopy "%%i" k:\test\!LAUFN!\ /y /f /r

-----> ein "eol=;" KANN nie benötigt werden.
-----> ein "tokens="1,2* delims=," macht auch keinen Sinn, wenn tatsächlich ein Komma im Namen sein könnte. Dann wird der XCOPY nichts finden.

Demnach reicht vollkommen:
FOR /f "delims=" %%i IN (temp.txt) DO xcopy "%%i" k:\test\!LAUFN!\ /y /f /r


Ist ein bisschen wartbarer, denke ich.

Gruß
Biber
Bitte warten ..
Ähnliche Inhalte
Windows 10

Mit einer batch Datei etwas in eine andere batch Datei schreiben und ausführen

Frage von RaphaelStockWindows 105 Kommentare

Hey Administratoren!! Ich habe ein Problem: Ich möchte alle 40 sek etwas in eine batch Datei schreiben und ausführen ...

Batch & Shell

Batch Datei zum verschieben von Dateien aus Unterordnern ?

gelöst Frage von Ghostrider1911Batch & Shell10 Kommentare

Hallo, ich bräuchte eine Batch Datei die Dateien aus Unterordnern verschiebt. Also ich habe folgende Verzeichniss Struktur: Z:\Dateien\Ordner1\M1\ Z:\Dateien\Ordnärx\M1\ ...

Batch & Shell

BATCH ini Datei Datei auslesen

gelöst Frage von Juergen42Batch & Shell2 Kommentare

Hallo zusammen, ich möchte eine ini Datei auslesen mit folgenden Aufbau INHALT DER INI ID=30 NAME="test1" PFAD="K:\Kontoauszug\Test1\*.pdf" PFAD_S="K:\Kontoauszug\Test1\Sicherung\" ID=28 ...

Batch & Shell

Neueste Datei mit Batch suchen

gelöst Frage von thilo-55Batch & Shell4 Kommentare

Ein herzliches Hallo an die Teilnehmer des Forums. Leider komme ich mit meinen batch/dos-Kenntnissen nicht mehr weiter. Evtl. kann ...

Neue Wissensbeiträge
Erkennung und -Abwehr
Trendmicro WFBS 10 ist in deutsch verfügbar!
Tipp von VGem-e vor 16 MinutenErkennung und -Abwehr

Servus Kollegen, downloadbar unter Gruß

Windows Update

MS Patchday Juni 2018 - BSOD, obwohl noch kein Patch freigegeben

Erfahrungsbericht von diemilz vor 44 MinutenWindows Update

Hallo zusammen, wir hatten hier letzte Woche ein massives Problem. Alles begann damit, dass ein Mitarbeiter kurz vor Feierabend ...

Microsoft
Shadow Defender
Tipp von Hyrule vor 12 StundenMicrosoft

Ich denke viele kennen es: Ein Update oder ein neues Programm und vieles funktioniert nicht mehr wie gewünscht. Die ...

Microsoft
Microsoft verarztet 50 Sicherheitslücken
Tipp von Hyrule vor 4 TagenMicrosoft

Microsoft verarztet mal wieder ein "paar" Sicherheitslücken in ihren Produkten: Und mal wieder Remote Code Execution und der abartige ...

Heiß diskutierte Inhalte
Hyper-V
Hyper V startet nicht wenn eine Offline geschaltene HD integriert wird
Frage von DieAzubinneHyper-V11 Kommentare

Hallö, bei einem PC der mit Windows 10 Pro installiert ist habe ich das Problem, dass der Virtuelle PC ...

CPU, RAM, Mainboards
ASUS P5W DELUXE startet nur manchmal und nur mit 2 GraKas
Frage von Windows10GegnerCPU, RAM, Mainboards11 Kommentare

Hallo, ich habe das o.g. Motherboard erhalten. Egal ob C2D 8400, Pentium D 945 oder P4 670, das teil ...

Virtualisierung
Virtuelle Maschinen langsam unabhängig vom Hypervisor
gelöst Frage von HyruleVirtualisierung9 Kommentare

Hallo, ich möchte gerne zwei bis drei virtuelle Maschinen virtualisieren, darauf sollen jeweils Windows 10 und diverse etwas größere ...

Rechtliche Fragen
Vorlage "private Nutzung dienstlicher Mobiltelefone"
Frage von linos2Rechtliche Fragen8 Kommentare

Hallo zusammen, ich bin auf der Suche nach einer Vorlage für die private Nutzung von dienstlichen Mobiltelefonen. Unsere Firma ...