randy73
Goto Top

Mit einer Patch Datei eine txt Zeile für Zeile auslesen und beim finden der Nummer eine Aktion ausführen

Hallo,

ich hoffe es kann mir jemand weiterhelfen, denn ich suche schon seit zwei Tagen eine Lösung für folgendes Problem:

Ich brauche eine Batch-Datei die ein Ordner in einem bestimmten interval Scannt und wenn eine Datei reinkommt, diese nach einer bestimmten Nr. ausliest und in den dafür vorgesehenen Ordner verschiebt. Mein Script liest aber leider nur die letzte Zeile aus face-sad . Ich bräucht Zeile für Zeile in einer Variable die ich dann mit Split(6,6) vergleichen kann. Hier komm ich mit meinen geringen DOS kenntnisen nicht weiter. Wer kann mir hier helfen?

@echo off
for /f %%i in (X010129730188_M10P_v01.LDT) do set ausgabe=!%ausgabe%!;%%i (
    set ausgabe=%ausgabe:~6,6%
    if %ausgabe% == 920200 (
		set ausgabe=%ausgabe:~10,2%
                move X010129730188_M10P_v01.LDT %ausgabe%\
                echo Datei gefunden
    ) else (
		echo Datei nicht gefunden %%i
    )
)
Vielen Dank!!

Gruß
Andy
Kommentar vom Moderator Biber am Mar 21, 2012 um 14:17:58 Uhr
Verschoben nach "Patch & Shell". Und Codeformatierung nachgetragen.

Content-Key: 182350

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

Printed on: April 25, 2024 at 21:04 o'clock

Member: Skyemugen
Skyemugen Mar 21, 2012 at 10:39:06 (UTC)
Goto Top
Aloha,

  1. möchte ich dich bitten unsere schöne ##blue|## Formatierung einzupflegen, liest sich besser.
  2. Woher hast du set ausgabe=!%ausgabe%! bzw. wolltest du nicht ein mal irgendwie ursprünglich mit setlocal enabledelayedexpansion und !ausgabe! arbeiten? Wahrscheinlich schon face-wink

Deine Anfrage gepaart mit deinem Skript gibt mir Rätsel, wie genau darf man
wenn eine Datei reinkommt, diese nach einer bestimmten Nr. ausliest
verstehen? Ich nehme an, diese Nummer kommt IN der Datei vor? Wie wird sie bestimmt, wenn ständig eine andere Datei in den Ordner kommt? Dein momentaner Zustand liest ja immer dieselbe Datei aus.

Nevermind, schon klargeworden genau darum mag ich keine Plaintext-Skripte, da lese ich nur und verarbeite nicht.

Wie gesagt, grundsätzlich benötigst du die verzögerte Variablenerweiterung, sonst wird nur der letzte Fund in die Variable geschrieben, sofern man diese nicht per Unterprozess aufruft. Aber eine nicht definierte Variable in sich selbst zu definieren ... auf die Idee muss man erst einmal kommen face-wink

edit: Aber ... ergibt
set ausgabe=%ausgabe:~6,6%if %ausgabe% == 920200 (set ausgabe=%ausgabe:~10,2%
nicht immer 00?

edit²: Äh, irgendwie dabei ist heute gar nicht Montag ... der Dateiname soll nach der Nummer ausgelesen werden oder der Inhalt? Dein Skript liest doch momentan den Dateinamen aus. Beim Nummernfinden in eine der Zeilen wäre ich für die Nutzung von findstr, kann die Zahlenkombination auch sonst an anderer Stelle als 6,6 enthalten sein, wenn nein, bräuchte man das ganze Variablengehampel nicht mit der Verzögerung

greetz André
Mitglied: 60730
60730 Mar 21, 2012 at 12:23:07 (UTC)
Goto Top
Moin,

Zitat von @randy73:
Mit einer Patch Datei eine txt Zeile für Zeile auslesen und beim finden der Nummer eine Aktion ausführen

Lol kommst du aus einer patchworkfamily?
Wenn ja, dann willkommen in der batchweltcimunity...

Hallo,

ich hoffe es kann mir jemand weiterhelfen, denn ich suche schon seit zwei Tagen eine Lösung für folgendes Problem:

Ich brauche eine Batch-Datei die ein Ordner in einem bestimmten interval Scannt und wenn eine Datei reinkommt, diese nach einer
bestimmten Nr. ausliest und in den dafür vorgesehenen Ordner verschiebt. Mein Script liest aber leider nur die letzte Zeile
aus face-sad . Ich bräucht Zeile für Zeile in einer Variable die ich dann mit Split(6,6) vergleichen kann. Hier komm ich mit
meinen geringen DOS kenntnisen nicht weiter. Wer kann mir hier helfen?

Nimm den fuehrenden doppelbefel raus und schau mal an, wo der hund begraben ist.
Hab ich in 20 sekunden gesehen.
Gruss


Ps dos ist das nicht, das ist schon was, wozu du die command brauchst.
Die ist nur verwandt, aber nicht verschwaegert mit dos.
Member: randy73
randy73 Mar 21, 2012 at 14:12:16 (UTC)
Goto Top
Denn Sie wissen nicht was Sie tun! Ich hab sowas noch nie über eine Batch-Datei Programmiert, da tu ich mir mit VB schon leichter. Aber hier geht es leider nicht anders.

Ich muss den Inhalt einer Datei auslesen und nach einer vierstellige Zahl an der 3 Position suchen, wenn ich diese Zahl gefunden hab benötige ich die zweistellige Zahl dahinter.

Beispiel-Datei:

014810001184
01983100129730188 <-- Hier muss ich nach der 8310 suchen und benötige die 01 dahinter
01983110129730188
0108609P

Ich würde ja gerne die Zeile in eine Variable stecken, und dieses mit einen mir nicht bekannten split-Befehl auswerten. Ich habe es leider auch nicht geschafft, die Zeile in einer Variable zu packen.


$zeile = str_split(%%i, 3, 4);
$ordner = str_split(%%i, 7, 2);

Wie bekomme ich das hin?
Mitglied: 60730
60730 Mar 21, 2012 at 15:31:03 (UTC)
Goto Top
Zitat von @randy73:
Denn Sie wissen nicht was Sie tun!
Ei bub maerr habbe dir doch de dipp gegebbe umsezze mussdde des alllans.

Da biba haedd dir de gode vormaddierd und des geraffel in den rischddisch dud gebackd
Da ohndree haett dir de dipp midderem jandelay expansionisten gegebbe

Und da paapa haedd dir verzaehlt, duh de verdammischdde doppelbefehl, der wo sich in de ersdde zeile nei gedan hat in de donn dredde...

Ich hab sowas noch nie über eine Batch-Datei Programmiert, da tu ich mir mit VB schon
leichter. Aber hier geht es leider nicht anders.

Ich muss den Inhalt einer Datei auslesen und nach einer vierstellige Zahl an der 3 Position suchen, wenn ich diese Zahl gefunden
hab benötige ich die zweistellige Zahl dahinter.

Beispiel-Datei:

014810001184
01983100129730188 <-- Hier muss ich nach der 8310 suchen und benötige die 01 dahinter
Also ist doch schon mal ein findstr /? Nicht so weit hergeholt
01983110129730188
0108609P

Ich würde ja gerne die Zeile in eine Variable stecken, und dieses mit einen mir nicht bekannten split-Befehl auswerten. Ich
habe es leider auch nicht geschafft, die Zeile in einer Variable zu packen.
Echo off.... Und dann siehst du warum...jandelay expresionistenclub laesst gruessen.

Oder ne subroutine, wie rob & bastla gerne nehmen.

> $zeile = str_split(%%i, 3, 4);
> $ordner = str_split(%%i, 7, 2);
> 

Wie bekomme ich das hin?

Naja - verfolge die hints
Member: Skyemugen
Skyemugen Mar 21, 2012 at 16:48:46 (UTC)
Goto Top
Aloha,

so jetzt mal Karten auf den Tisch, du beantwortest ja leider nicht meine Fragen ...
kann die Zahlenkombination auch sonst an anderer Stelle [...] enthalten sein, wenn nein, bräuchte man das ganze Variablengehampel nicht mit der Verzögerung
Dein zweites Beispiel weicht stark vom ersten Beispiel ab, bitte mal glasklar jetzt sagen, was WO ausgelesen werden soll.

Sollte die gesuchte Zahl nur EINMAL in einer Datei vorkommen, wird das Ding noch viel einfacher, wenn du eigentlich nur die zwei Stellen nach der gesuchten Zahl haben willst.

@echo off & setlocal
set "Pfad=E:\Skripte"  
set "Zahl=8310"  

pushd "%Pfad%"  
for /f "delims=" %%s in ('dir /b /a-d *.LDT') do call :Ablauf "%%s"  
popd
pause
goto :eof

:Ablauf
for /f "delims=" %%m in ('findstr %Zahl% %1') do set "Ausgabe=%%m"  
if not defined Ausgabe goto :eof
call set "Ausgabe=%%Ausgabe:*%Zahl%=%%"  
set "Ziel=%Ausgabe:~0,2%"  
if not exist %Ziel% md %Ziel%
echo move %1 "%Ziel%"  
set "Ausgabe="  
goto :eof
mal als Beispiel dafür,

man kann z.B. auch für die Suche findstr /B [0-9][0-9][0-9]%Zahl% nutzen

Mir ist noch nicht ganz klar, ob du in allen Dateien dieselbe Zahl suchst oder ob die Stellen überhaupt wenn dann gleich wären (darum habe ich die Variante erst einmal weggelassen) etc.

greetz André
Member: randy73
randy73 Mar 22, 2012 at 08:55:17 (UTC)
Goto Top
Hi,

erst mal danke Skymugen für deine schnelle Antworten face-smile

Nun die Karten auf den Tisch,

--- kann die Zahlenkombination auch sonst an anderer Stelle [...] enthalten sein, wenn nein, bräuchte man das ganze Variablengehampel nicht mit der Verzögerung

die Zahl kann leider auch an anderen Stellen vorkommen, daher ist die Position (3 Stelle) wichtig.

--- Dein zweites Beispiel weicht stark vom ersten Beispiel ab, bitte mal glasklar jetzt sagen, was WO ausgelesen werden soll.

Ich sag mal, dass erste Beispiel war noch weit vom Ziel entfernt face-wink . Dein Script funktioniert auf jeden Fall schon einmal, Danke. Taucht die Zahl in der Datei noch an einer anderen Stelle auf, nimmt er einen falschen Wert. Wie kann man dies noch regeln?

Vielen Dank Skymugen

Gruß
Andy
Member: Skyemugen
Skyemugen Mar 22, 2012 at 10:30:33 (UTC)
Goto Top
Aloha,

Wie kann man dies noch regeln?
...
for /f "delims=" %%m in ('findstr /B [a-z0-9][a-z0-9][a-z0-9]%Zahl% %1') do set "Ausgabe=%%m"  
als Ersatz für die vorhandene Zeile 12, damit sucht er vom Zeilenanfang den Treffer, der in den ersten drei Positionen unbekannten alphanumerischen Inhalt gefolgt von der gesuchten Zahl enthält face-wink

greetz André

P.S.: Bitte achte doch auf die Schreibweise meines Nicks oder verwende meinen Namen, ich habe mit dem Himmel nun wirklich nichts zu tun face-wink
Member: randy73
randy73 Mar 22, 2012 at 11:21:32 (UTC)
Goto Top
Danke André,

dass sieht jetzt super aus, vielen Dank face-smile

Gruß Andy

P.S.: Und sorry wegen deinen Namen