.bat - File für das gezielte Ausgeben einer Datei?
Es handelt sich um einen Wunsch aus unserer Logistik.
Es soll ein PC zur Verfügung gestellt werden der lediglich für das Finden und Anzeigen verschiedener Artikel sein soll.
Und das Programm sollte am besten so einfach wie möglich sein und bestenfalls mit Boardmitteln.
Guten Morgen Liebe Anwesende des Forums =)
ich brauche ein kleines Programm, am besten mit Boardmitteln, welches in einem Ordner (und seinen Unterordnern) nach diversen Artikelnnummern sucht, und diese dann maximiert auf dem Bildschirm ausgibt. --> PDF´s
Hintergrund der Geschichte ist, dass bestimmte Mitarbeiter verschiedene Einzelteile zusammenfügen müssen. Um die Fehlerqote zu dezimieren möchte der Produktionsleiter einen
PC zur Verfügung gestellt bekommen, an welchem die MA
Die Suche erfolgt über ein Netzwerk, sprich die Daten liegen auf dem Server und der PC ist im Netzwerk, vlt relevant.
Kann mir bitte wer bei der Erstellung dieses kleinen .Bat Files behilflich sein?
Ich war ja bereits bei:
@echo off
:start
cls
title "Artikelnummer eingeben"
@echo Bitte tippen Sie die Artikelnummer ein
set /p Artikel=
dir Pfad\%Artikel%**.pdf /s
aber dass ist weniger als eine Lösung, der Artikel wird gefunden, aber wie ich diese directory dann verwende und gleich im nächsten Befehl öffne, ein Rätsel. Ebenso wäre eine GUI ganz nett, sodass wie gesagt, Nur ein riesen Fenster ist mit einer Eingabemöglichkeit von 5 Zahlen und sonst nichts. Kein Zugriff möglich, kein Bearbeiten möglich, kein Schließen des Fensters möglich.
Das Schließen des PDFs schon, anschließend soll man aber gleich wieder beim Eingabefenster sein.
Ich bin leider kein Programmierer, aber ich kann mir vorstellen dass das mit VisualBasic oder C# mehr als Idioteneinfach erreicht werden kann, jedoch besitzen wir soetwas in der Arbeit nicht und meine Kentnisse sind zu gering.
Ich bedanke mich jetzt schon bei den fleißigen Menschen hier =)=) auch wenn mein letzter Artikel auch nicht gelöst werden konnte... =/
Lg Alex
Es soll ein PC zur Verfügung gestellt werden der lediglich für das Finden und Anzeigen verschiedener Artikel sein soll.
Und das Programm sollte am besten so einfach wie möglich sein und bestenfalls mit Boardmitteln.
Guten Morgen Liebe Anwesende des Forums =)
ich brauche ein kleines Programm, am besten mit Boardmitteln, welches in einem Ordner (und seinen Unterordnern) nach diversen Artikelnnummern sucht, und diese dann maximiert auf dem Bildschirm ausgibt. --> PDF´s
Hintergrund der Geschichte ist, dass bestimmte Mitarbeiter verschiedene Einzelteile zusammenfügen müssen. Um die Fehlerqote zu dezimieren möchte der Produktionsleiter einen
PC zur Verfügung gestellt bekommen, an welchem die MA
- nichts haben ausser ein Eingabefenster indem auch nichts anderes eingegeben werden kann als 5 Numerische Zeichen, sprich Zahlen.
- Nach Eingabe der 5 Zahlen soll nach dem Artikel gesucht werden.
- Ist dieser vorhanden soll das PDF gleich aufgemacht werden.
- Ist der Artikeln nicht vorhanden so soll ein klassischer Fehler Text ausgegeben werden wie: "Artikelnummer falsch oder nicht vorhanden".
Die Suche erfolgt über ein Netzwerk, sprich die Daten liegen auf dem Server und der PC ist im Netzwerk, vlt relevant.
Kann mir bitte wer bei der Erstellung dieses kleinen .Bat Files behilflich sein?
Ich war ja bereits bei:
@echo off
:start
cls
title "Artikelnummer eingeben"
@echo Bitte tippen Sie die Artikelnummer ein
set /p Artikel=
dir Pfad\%Artikel%**.pdf /s
aber dass ist weniger als eine Lösung, der Artikel wird gefunden, aber wie ich diese directory dann verwende und gleich im nächsten Befehl öffne, ein Rätsel. Ebenso wäre eine GUI ganz nett, sodass wie gesagt, Nur ein riesen Fenster ist mit einer Eingabemöglichkeit von 5 Zahlen und sonst nichts. Kein Zugriff möglich, kein Bearbeiten möglich, kein Schließen des Fensters möglich.
Das Schließen des PDFs schon, anschließend soll man aber gleich wieder beim Eingabefenster sein.
Ich bin leider kein Programmierer, aber ich kann mir vorstellen dass das mit VisualBasic oder C# mehr als Idioteneinfach erreicht werden kann, jedoch besitzen wir soetwas in der Arbeit nicht und meine Kentnisse sind zu gering.
Ich bedanke mich jetzt schon bei den fleißigen Menschen hier =)=) auch wenn mein letzter Artikel auch nicht gelöst werden konnte... =/
Lg Alex
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 174433
Url: https://administrator.de/contentid/174433
Ausgedruckt am: 22.11.2024 um 15:11 Uhr
11 Kommentare
Neuester Kommentar
Hallo ich glaube http://www.autoitscript.com/site/autoit/ wäre was für dich.
Hallo Alex-IT02!
Wenn Du Deinen Ansatz etwas abwandelst, etwa:
sollte das doch grundsätzlich mit Batch zu machen sein ...
Grüße
bastla
Wenn Du Deinen Ansatz etwas abwandelst, etwa:
@echo off & setlocal
title Artikelnummer eingeben
set "Pfad=D:\Der Pfad"
:start
cls
set /p Artikel=Bitte tippen Sie die Artikelnummer ein:
if not defined Artikel goto :start
if exist "%Pfad%\%Artikel%.pdf" (
"%Pfad%\%Artikel%.pdf"
) else (
echo Artikel %Artikel% nicht gefunden!
pause
)
goto :start
Grüße
bastla
Hallo Alex-IT02!
Vorweg: Was den Umlaut anlangt, kannst Du entweder den Batch mit einem ASCII-fähigen Editor (im schlimmsten Fall "
umschalten.
"
Wenn Du auch Unterverzeichnisse mit einbeziehen willst, könnte das etwa so gehen (ungetestet):
Hinsichtlich der Anzeige noch ein Hinweis: Sollte es in verschiedenen Ordnern mehr als eine %Artikel%.pdf geben, werden alle geöffnet.
Grüße
bastla
Vorweg: Was den Umlaut anlangt, kannst Du entweder den Batch mit einem ASCII-fähigen Editor (im schlimmsten Fall "
edit
" verwenden) erstellen oder am Anfang des Batches die Codepage mitchcp 1252>nul
"
setlocal
" verwende ich standardmäßig - es wird damit festgelegt, dass nach dem Ende des Batches (oder nach einem expliziten "endlocal
") alle Änderungen an Variablen (inkl aller neu erstellten) "vergessen" werden und damit nicht ev in einem weiteren Batch bereits (mit unerwünschten Werten) vorhanden wären.Wenn Du auch Unterverzeichnisse mit einbeziehen willst, könnte das etwa so gehen (ungetestet):
@echo off & setlocal
title Artikelnummer eingeben
cd /d "L:\CAD\Pfad"
:start
cls
set /p Artikel=Bitte tippen Sie die Artikelnummer ein:
if not defined Artikel goto :start
dir /s /b %Artikel%.pdf >nul 2>&1 && (
for /f "delims=" %%i in ('dir /s /b "%Artikel%.pdf" 2^>nul') do "%%i"
) || (
echo Artikel %Artikel% nicht gefunden!
pause
)
goto :start
Hinsichtlich der Anzeige noch ein Hinweis: Sollte es in verschiedenen Ordnern mehr als eine %Artikel%.pdf geben, werden alle geöffnet.
Grüße
bastla
Hallo Alex-IT02!
Versuch's mal damit:
Es wird jetzt die Eingabe auf
Suche beschleunigen ev mittels Indexdatei:
Für beide Ansätze habe ich das Testen Dir überlassen ...
Grüße
bastla
Versuch's mal damit:
@echo off & setlocal
title Artikelnummer eingeben
chcp 1252>nul
cd /d "L:\CAD\Pfad"
:start
cls
set /p Artikel=Bitte tippen Sie die Artikelnummer ein:
if not defined Artikel goto :start
echo %Artikel%|findstr "[^0-9]">nul && goto :Start
set "Artikel=%Artikel:~,5%"
if "%Artikel:~4,1%"=="" goto :Start
dir /s /b %Artikel%.pdf >nul 2>&1 || (
echo Artikel %Artikel% nicht gefunden!
echo\
echo Weiter mit Tastendruck ...
pause>nul
goto :start
)
for /f "delims=" %%i in ('dir /s /b "%Artikel%.pdf" 2^>nul') do start /MAX "Anzeige %%~nxi" "%%i"
goto :start
- nicht leer
- ausschließlich Ziffern
- mindestens 5 Stellen
Suche beschleunigen ev mittels Indexdatei:
@echo off & setlocal
title Artikelnummer eingeben
set "Index=%temp%\Artikelindex.txt"
set "Delim=;"
del "%Index%" 2>nul
chcp 1252>nul
cd /d "L:\CAD\Pfad"
for /f "delims=" %%i in ('dir /s /b ?????.pdf') do >>"%Index%" echo %%~ni%Delim%%%~fi
:start
cls
set /p Artikel=Bitte tippen Sie die Artikelnummer ein:
if not defined Artikel goto :start
echo %Artikel%|findstr "[^0-9]">nul && goto :Start
set "Artikel=%Artikel:~,5%"
if "%Artikel:~4,1%"=="" goto :Start
dir /s /b %Artikel%.pdf >nul 2>&1 || (
echo Artikel %Artikel% nicht gefunden!
echo\
echo Weiter mit Tastendruck ...
pause>nul
goto :start
)
for /f "tokens=1-2 delims=%Delim%" %%i in ('findstr /i /b "%Artikel%%Delim%" "%Index%"') do start /MAX "Artikel %%i" "%%j"
goto :start
Grüße
bastla
Hallo Alex-IT02!
Wenn Du die Zeile 23 auf
änderst, sollte auch Variante 2 funktionieren ...
Zu Deinen Fragen bzw den Codezeilen:
ausgeführt - Ergebnis: entweder eine Auflistung aller dem Suchmuster entsprechenden Dateien mit Pfadangabe (also etwa "L:\CAD\Pfad\Unterordner\15253.pdf") oder eine Fehlermeldung "Datei nicht gefunden" (die aber nicht angezeigt werden soll, weshalb der "Fehlerkanal" 2 nach "
Für jeden dieser Dateipfade wird nun (ohne ihn an ev enthaltenen Leerzeichen zu unterteilen - deshalb "
Um den Dateipfad unter Anführungszeichen setzen zu können (weil er ev Leerzeichen enthält) muss vorweg auch schon ein Text unter Anführungszeichen verwendet werden (die Syntax von "
Schön übrigens, dass Du nach der Code- fragst ...
Hinsichtlich der "MsgBox" oder einer "InputBox": Du kannst für Ersteres zwar
verwenden, aber ansonsten wäre dafür temporäres VBS geeignet ...
Grüße
bastla
Ich mache z.B. bei Variante 1 bei Zeile 12 und 19 ein "" nach dem %Artikel% weil es verschiedene Endungen gibt wie -EN oder -DE vor dem .pdf.
Damit ist der Dateiname aber nicht mehr genau 5 Zeichen lang, und nur nach solchen wird in der Indexdatei gesucht ...Wenn Du die Zeile 23 auf
for /f "tokens=1-2 delims=%Delim%" %%i in ('findstr /i /b "%Artikel%" "%Index%"') do start /MAX "Artikel %%i" "%%j"
Zu Deinen Fragen bzw den Codezeilen:
Zeile 4 -->ist die Definition des Startverzeichnisses und
Genauer: das Wechseln in das Startverzeichnis (ist danach aktuell und muss in weiterer Folge nicht mehr brücksichtigt werden)zeile 7 -->die Variablendeklaration
Einfach nur eine Eingabe, die in der Variablen %Artikel% gespeichert wird.Bezüglich Zeile 8, --> if not defined, steht für eine Eingabepflicht?
Wenn nix eingegeben, sondern nur "Enter" gefrückt wurde, ist die Variable %Artikel% nicht definiert.Zeile 9 ist die Beschränkung auf numerische Zeichen? Wobei dass echo doch eine Ausgabe ist?
Die Ausgabe dient dazu, den Variableninhalt an "findstr
" zu übergeben--->%Artikel% wird überprüft ob 0-9 vorhanden ist, >nul heißt was? &&? ----> echo %Artikel%|findstr "[^0-9]">nul && goto :Start
Der Suchstring "[^0-9]
" bedeutet: Suche nach einer Zeile (auch wenn nur eine einzige Zeile bzw ein String übergeben wird, arbeitet "findstr
" zeilenorientiert), welche Zeichen, die nicht zwischen "0" und "9" liegen, enthält.Zeile 10, %Artikel:~,5% ~ ,5 ist die Beschränkung auf die ersten 5? wenn es 5,~ hieße, würden dann die letzten 5 berücksichtigt werden oder ist dass nicht so einfach?
Die letzten 5 erhieltest Du mit "%Artikel:~-5%
" - siehe dazu "set /?
" ...Zeile 11, ~4,1%"=="" wenn das 5. Zeichen eine Leereingabe ist goto start?
Wenn das 5. Zeichen nicht existiert (zwischen den Anführungszeichen steht ja genau "nix" ) ...Zeile 12 sucht in Verzeichnissen und Unterverzeichnissen, das >nul gibt welche Bedingung an?, ansonsten wird "nicht gefunden" ausgegeben.
Auch hier will ich die Ergebnisse nicht angezeigt bekommen, sondern nur feststellen, ob es passende Dateien gibt und danach wiederum anhand des Errorlevels reagieren können.Zeile 14 bis 17 ersetzt die "Drücken Sie eine beliebige Taste zum fortfahren"-Geschichte, welche Rolle spiellt dabei echo\?
Mit "echo\
" (anstelle des "\" könnden auch verschiedene andere Zeichen wie ".", "(", ",", - einfach ausprobieren - verwendet werden) wird eine Leerzeile ausgegeben.>nul besagt dass eine Eingabe getätigt werden muss, stimmt das?
Nein - wie bereits erwähnt wird dadurch eine Ausgabe (hier die "Originalmeldung" des "pause
"-Befehls) unterdrückt - gewartet wird auf den Tastendruck, weil "pause
" ja trotzdem ausgeführt wird.was heißt nachstehender Befehl?
for /f "delims=" %%i in ('dir /s /b "%Artikel%.pdf" 2^>nul') do start /MAX "Anzeige %%~nxi" "%%i"
Solche Schleifen sind immer am besten "von innen nach außen" zu lesen - es wird zunächstfor /f "delims=" %%i in ('dir /s /b "%Artikel%.pdf" 2^>nul') do start /MAX "Anzeige %%~nxi" "%%i"
dir /s /b "%Artikel%.pdf" 2^>nul
nul
" umgeleitet wird; wäre nicht erforderlich, da ja vorweg schon festgestellt wurde, dass es zumindest eine passende Datei gibt).Für jeden dieser Dateipfade wird nun (ohne ihn an ev enthaltenen Leerzeichen zu unterteilen - deshalb "
delims=
" ohne Angabe eines Trennzeichens, was bedeutet: verwende die Zeile "am Stück") der "do
"-Teil ausgeführt, in welchem (wegen des Maximierungswunsches und damit der Batch nicht auf das Schließen wartet) der Befehl "start
" verwendet wird.Um den Dateipfad unter Anführungszeichen setzen zu können (weil er ev Leerzeichen enthält) muss vorweg auch schon ein Text unter Anführungszeichen verwendet werden (die Syntax von "
start
" erfordert das); der Fenstertitel "Anzeige " + Dateiname ("%%~nxi
") würde aber tatsächlich nur bei einem weiteren CMD-Fenster zum Tragen kommen und fällt daher unter Spielerei - zwei Anführungszeichen ohne etwas dazwischen hätten es auch getan ... Schön übrigens, dass Du nach der Code- fragst ...
Hinsichtlich der "MsgBox" oder einer "InputBox": Du kannst für Ersteres zwar
msg %username% Deine Nachricht
Grüße
bastla