Per Batch Datei die Zahl jede Zell in einer Spalte um 10 verkleinern
Guten Morgen,
ich importiere jeden Tag automatisch eine Lagerbestandsliste(csv Datei) von meinem Lieferant mit einem Batch Datei. Die Batch Datei importiert zuerst die csv Datei von FTP des Lieferanten(mit wget) und im zweiten Schritt importiert die Batch Datei die csv Datei in meiner Datenbank. Die csv Datei hat 2 Spalten: Spalte A ist Artikelnummer, Spalte B ist Lagerbestand.
Ich möchte per Batch die Zahl in jeder Zelle in der Spalte B um 10 verringern. Wie kann man das machen?
Vielen Dank im Voraus.
ich importiere jeden Tag automatisch eine Lagerbestandsliste(csv Datei) von meinem Lieferant mit einem Batch Datei. Die Batch Datei importiert zuerst die csv Datei von FTP des Lieferanten(mit wget) und im zweiten Schritt importiert die Batch Datei die csv Datei in meiner Datenbank. Die csv Datei hat 2 Spalten: Spalte A ist Artikelnummer, Spalte B ist Lagerbestand.
Ich möchte per Batch die Zahl in jeder Zelle in der Spalte B um 10 verringern. Wie kann man das machen?
Vielen Dank im Voraus.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 324639
Url: https://administrator.de/forum/per-batch-datei-die-zahl-jede-zell-in-einer-spalte-um-10-verkleinern-324639.html
Ausgedruckt am: 23.12.2024 um 04:12 Uhr
12 Kommentare
Neuester Kommentar
Hallo Lifen,
da haben wir beide ein Problem. Seit XP habe ich mit Batch nicht mehr beschäftigt, aber der Link von H41mSh1C0R liefert vielleicht Hinweise ob im Batch vielleicht auch gerechnet werden kann. Beim diagonallesen sah es aber nicht so aus. Vielmehr scheint es, wie zu Dos-Zeiten mit viel Trixerei vebunden zu sein.
Du hast gesagt, die Daten werden in eine Datenbank importiert. Häufig sind auch dort Skriptschprachen implementiert, mit denen man dann auch rechnen und auf Datenspalten zugreifen kann. Mit EXCEL oder ACCESS wär es zum Beispiel kein Problem diese Opperationen durchzuführen. Auch Open Office bietet Möglichkeiten, aber die Programmierung ist dort etwas schwieriger.
Ich könnte Dir auch ein kleines Programm schreiben, mit dem Du die Bestandszahlen umrechnen kannst, aber einen Macro kannst Du jederzeit anpassen wenn es nötig ist. Da Du einen Batch geschrieben hast, sollte es Dir nicht schwer fallen auch einen Makro zu schreiben. Wenn ich weiß um welche Datenbank es geht, kann ich Dir entsprechende Hilfe anbieten.
Grüße von der Nordsee
Peter
da haben wir beide ein Problem. Seit XP habe ich mit Batch nicht mehr beschäftigt, aber der Link von H41mSh1C0R liefert vielleicht Hinweise ob im Batch vielleicht auch gerechnet werden kann. Beim diagonallesen sah es aber nicht so aus. Vielmehr scheint es, wie zu Dos-Zeiten mit viel Trixerei vebunden zu sein.
Du hast gesagt, die Daten werden in eine Datenbank importiert. Häufig sind auch dort Skriptschprachen implementiert, mit denen man dann auch rechnen und auf Datenspalten zugreifen kann. Mit EXCEL oder ACCESS wär es zum Beispiel kein Problem diese Opperationen durchzuführen. Auch Open Office bietet Möglichkeiten, aber die Programmierung ist dort etwas schwieriger.
Ich könnte Dir auch ein kleines Programm schreiben, mit dem Du die Bestandszahlen umrechnen kannst, aber einen Macro kannst Du jederzeit anpassen wenn es nötig ist. Da Du einen Batch geschrieben hast, sollte es Dir nicht schwer fallen auch einen Makro zu schreiben. Wenn ich weiß um welche Datenbank es geht, kann ich Dir entsprechende Hilfe anbieten.
Grüße von der Nordsee
Peter
@ H41mSh1C0R
Natürlich ist PS eleganter - aber ganz so arg ist es in Batch auch nicht (zumindest solange die Mengen nur ganzzahlige Werte sind):
Ohne Kopfzeile und Fehlerbehandlung (und weniger les- und wartbar) würde
genügen ...
Grüße
bastla
Natürlich ist PS eleganter - aber ganz so arg ist es in Batch auch nicht (zumindest solange die Mengen nur ganzzahlige Werte sind):
@echo off & setlocal
set "Ein=D:\CSV_Ein.csv"
set "Aus=D:\CSV_Aus.csv"
set "Fehler=D:\Fehler.txt"
set "Delim=,"
set "Delta=-10"
del "%Fehler%" 2>nul
set /p Kopfzeile=<"%Ein%"
>"%Aus%" echo %Kopfzeile%
for /f "usebackq skip=1 tokens=1-2 delims=%Delim%" %%a in ("%Ein%") do (
set /a Menge=%%b+%Delta%
setlocal enabledelayedexpansion
if !Menge! lss 0 >>"%Fehler%" echo Fehlerhafte Menge bei Artikel %%a
>>"%Aus%" echo %%a%Delim%!Menge!
endlocal
)
if exist "%Fehler%" start notepad "%Fehler%"
@echo off & setlocal
del "D:\CSV_Aus.csv" 2>nul
for /f "usebackq tokens=1-2 delims=," %%a in ("D:\CSV_Ein.csv") do (
set /a Menge=%%b-10
setlocal enabledelayedexpansion
>>"D:\CSV_Aus.csv" echo %%a,!Menge!
endlocal
)
Grüße
bastla
Hallo bastla,
frohe Weihnachten!
setlocal ohne disabledelayedexpansion funktioniert bei default Einstellungen aber nicht wenn es per Registry Enabled ist.
Ich persönlich mag set-/endlocal in der schleife nicht so sehr (auch wenn es funktioniert) ich würde dann ja eher einen
nehmen.
Gruß
LotPings
frohe Weihnachten!
setlocal ohne disabledelayedexpansion funktioniert bei default Einstellungen aber nicht wenn es per Registry Enabled ist.
Ich persönlich mag set-/endlocal in der schleife nicht so sehr (auch wenn es funktioniert) ich würde dann ja eher einen
>>"D:\CSV_Aus.csv" call echo %%a,%%Menge%%
Gruß
LotPings
Hallo ha5257!
Um eine negative Menge durch 0 zu ersetzen könntest Du die Zeile 14 auf
ändern.
4 Spalten ausgeben kannst Du (zusötzli ch zu Deiner schon vorgeschlagenen Anpassung der Zeile 11) mit folgender Zeile 15:
Grüße
bastla
Um eine negative Menge durch 0 zu ersetzen könntest Du die Zeile 14 auf
if !Menge! lss 0 set /a Menge=0
4 Spalten ausgeben kannst Du (zusötzli ch zu Deiner schon vorgeschlagenen Anpassung der Zeile 11) mit folgender Zeile 15:
>>"%Aus%" echo %%a%Delim%%%b%Delim%%%c%Delim%!Menge!
Grüße
bastla
Hallo ha5257!
Das scheitert in diesem Fall nicht nur am Trennzeichen (das Zeichen "|" hat ja in Batch eine besondere Bedeutung), sondern auch an der Tatsache, dass mehrere aufeinander folgende Trennzeichen im Batch nur als eines gezählt werden.
Um diese Ausgangsdatei korrekt zu verarbeiten, sollte es dann doch (wie schon oben vorgeschlagen) PowerShell oder zumindest VBScript sein ...
Grüße
bastla
Das scheitert in diesem Fall nicht nur am Trennzeichen (das Zeichen "|" hat ja in Batch eine besondere Bedeutung), sondern auch an der Tatsache, dass mehrere aufeinander folgende Trennzeichen im Batch nur als eines gezählt werden.
Um diese Ausgangsdatei korrekt zu verarbeiten, sollte es dann doch (wie schon oben vorgeschlagen) PowerShell oder zumindest VBScript sein ...
Grüße
bastla