Laufwerksbezeichnung (label) in Batch als Variable nutzen
Hallo zusammen,
ich bin sicher, dass meine Frage für alle Experten hier viel zu simpel ist, ich bin aber absoluter Einsteiger beim Thema Batch-Dateien und freue mich über eure Hilfe!
Ich möchte die Laufwerksbezeichnung (DOS: label) eines Wechsellaufwerks, das immer den selben Laufwerksbuchstaben hat, auslesen und innerhalb der selben Batch-Datei als Variable verwenden. Die Wechseldatenträger sind nach Wochentagen benannt und ich möchte sie innerhalb der Batch-Datei anhand ihres Labels identifizieren, um dann über if-clauses bestimmte Aktionen für die Wochentage zu steuern. Das klappt alles ganz gut, ich brauche nur einmal eure Hilfe (1-3 Zeilen), wie ich das Label eines Datenträgers auslese (ohne es zu ändern) und dem ausgelesenen Wert einen Variablennamen zuordne...
Danke für eure Hilfe!
VG Tobias
ich bin sicher, dass meine Frage für alle Experten hier viel zu simpel ist, ich bin aber absoluter Einsteiger beim Thema Batch-Dateien und freue mich über eure Hilfe!
Ich möchte die Laufwerksbezeichnung (DOS: label) eines Wechsellaufwerks, das immer den selben Laufwerksbuchstaben hat, auslesen und innerhalb der selben Batch-Datei als Variable verwenden. Die Wechseldatenträger sind nach Wochentagen benannt und ich möchte sie innerhalb der Batch-Datei anhand ihres Labels identifizieren, um dann über if-clauses bestimmte Aktionen für die Wochentage zu steuern. Das klappt alles ganz gut, ich brauche nur einmal eure Hilfe (1-3 Zeilen), wie ich das Label eines Datenträgers auslese (ohne es zu ändern) und dem ausgelesenen Wert einen Variablennamen zuordne...
Danke für eure Hilfe!
VG Tobias
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 336312
Url: https://administrator.de/contentid/336312
Ausgedruckt am: 25.11.2024 um 00:11 Uhr
21 Kommentare
Neuester Kommentar
Hallo @all,
da der Laufwerksbuchstabe aller Wechsellaufwerke immer konstant ist und das LABEL gesucht wird, sollte der Code wohl eher so aussehen:
Gruß
Friemler
da der Laufwerksbuchstabe aller Wechsellaufwerke immer konstant ist und das LABEL gesucht wird, sollte der Code wohl eher so aussehen:
@echo off & setlocal
set "DriveLetter=C:"
for /f "tokens=2 delims==" %%a in ('wmic volume where DriveLetter^="%DriveLetter%" get Label /value') do (
set "DriveLabel=%%a"
)
echo %DriveLabel%
Gruß
Friemler
Hallo Tobias,
Deine Aufgabenstellung:
Der Laufwerksbuchstabe ist immer derselbe und die Laufwerksbezeichnung soll in eine Variable eingelesen werden.
Das Folgende ist nicht so elegant wie die Lösung mit
Anmerkungen:
02.
definiert eine Variable für den Laufwerksbuchstaben, hier F:
03.
Prüft ob auf dem Laufwerk F: ein Stammverzeichnis existiert. Das ist nicht der Fall wenn F: nicht existiert oder F: nicht formatiert ist.
04.
05.
hier wird die Variable
06.
temp.txt wird nicht mehr benötigt, also gelöscht
07.
Der Inhalt von
Interessant ist aber nur der Teil nach dem "statischen" Meldungstextanteil, also alles ab dem 32. Zeichen, also wird
Bei nichtdeutschen OS lautet der "statische" Teil anders und ist daher wahrscheinlich nicht 32 Zeichen lang. Das gälte es gegebenenfalls anzupassen.
08.
Die gewünschte Variable
Gruß Frank
Deine Aufgabenstellung:
Der Laufwerksbuchstabe ist immer derselbe und die Laufwerksbezeichnung soll in eine Variable eingelesen werden.
Das Folgende ist nicht so elegant wie die Lösung mit
for
, da es über eine temporäre Hilfs-Datei läuft und die Ausgabe bei deutschem OS anders lautet als bei englischem, aber es funktioniert gut und ist wahrscheinlich leicht nachvollziehbar.@echo off
set buchstabe=F:
if not exist %buchstabe%\. goto fehler
vol %buchstabe% > temp.txt
set /p lwname= < temp.txt
del temp.txt
set lwname=%lwname:~32%
echo Die Laufwerksbezeichnung lautet: %lwname%
goto ende
:fehler
echo Laufwerk nicht gefunden
goto ende
:ende
Anmerkungen:
02.
definiert eine Variable für den Laufwerksbuchstaben, hier F:
03.
Prüft ob auf dem Laufwerk F: ein Stammverzeichnis existiert. Das ist nicht der Fall wenn F: nicht existiert oder F: nicht formatiert ist.
04.
vol F:
gibt "label" aus ohne es zu ändern. Die Ausgabe wird in die Datei temp.txt umgeleitet.05.
hier wird die Variable
%lwname%
belegt und zwar mit dem Inhalt (der ersten Zeile) von temp.txt06.
temp.txt wird nicht mehr benötigt, also gelöscht
07.
Der Inhalt von
%lwname%
ist jetzt Datenträger in Laufwerk F: ist Freitag
Interessant ist aber nur der Teil nach dem "statischen" Meldungstextanteil, also alles ab dem 32. Zeichen, also wird
%lwname%
neu belegt und zwar mit dem alten Wert von %lwname%
aber nur der Teil ab dem 32. Zeichen bis zum EndeBei nichtdeutschen OS lautet der "statische" Teil anders und ist daher wahrscheinlich nicht 32 Zeichen lang. Das gälte es gegebenenfalls anzupassen.
08.
Die gewünschte Variable
%lwname%
steht zur Auswertung zur Verfügung.Gruß Frank
Hallo Tobis,
das ging mir auch so.
Da ich mit der Syntax des For-Befehls leider nicht wirklich vertraut bin, das aber immer schon ändern wollte, habe ich das Beispiel von Friemler als Anlass genommen, nachzuvollziehen was es macht.
Es wird diese Befehlszeile ausgeführt
deren Ausgabe ist beispielsweise
wenn denn das Laufwerk C: den Namen "System" hat.
(Der Befehl spuckt zusätzlich ein paar Leerzeilen aus, die aber in diesem Konstrukt keine Auswirkung haben.)
Die For-Schleife durchläuft alle Ausgabezeilen (auch die Leerzeilen) des angegebenen Befehls.
Die Zeilen werden jeweils in Teilstücke (tokens) zerschnitten.
Das Trennzeichen (delims) kann individuell definiert werden.
bedeutet das Trennzeichen ist das Gleichheitszeichen
enthält das Trennzeichen einmal, also wird die Zeile in zwei tokens zerlegt und zwar in
gibt nicht an, dass das Ergebnis zwei tokens sind, sondern, dass nur der 2. token interessiert.
Der Variablen %%a wird daher der zweite Token zugeordnet, also
und dadurch kann der Zielvariablen der gewünscht Wert zugeordnet werden:
Bei Angabe von
Wenn die Variablen dann wie folgt benutzt würden:
wäre die Ausgabe
was recht witzlos wäre.
(Der verwendete echo-Befehl würde durch die For-Schleife auch auf die Leerzeilen angewendet werden, die der Befehl
Da viele Andere auch nicht mit der Syntax des For-Befehls vertraut sind, hat Friemler dazu ein sehr gutes Tutorial geschrieben, was auch die Quelle für meinen Beitrag hier war.
Tutorial zur FOR-Schleife
Dazu an dieser Stelle meinen herzlichen Dank an Friemler.
Gruß Frank
das ging mir auch so.
Da ich mit der Syntax des For-Befehls leider nicht wirklich vertraut bin, das aber immer schon ändern wollte, habe ich das Beispiel von Friemler als Anlass genommen, nachzuvollziehen was es macht.
Es wird diese Befehlszeile ausgeführt
wmic volume where DriveLetter="C:" get Label /value
deren Ausgabe ist beispielsweise
Label=System
wenn denn das Laufwerk C: den Namen "System" hat.
(Der Befehl spuckt zusätzlich ein paar Leerzeilen aus, die aber in diesem Konstrukt keine Auswirkung haben.)
Die For-Schleife durchläuft alle Ausgabezeilen (auch die Leerzeilen) des angegebenen Befehls.
Die Zeilen werden jeweils in Teilstücke (tokens) zerschnitten.
Das Trennzeichen (delims) kann individuell definiert werden.
delims==
bedeutet das Trennzeichen ist das Gleichheitszeichen
Label=System
enthält das Trennzeichen einmal, also wird die Zeile in zwei tokens zerlegt und zwar in
Label
und System
tokens=2
gibt nicht an, dass das Ergebnis zwei tokens sind, sondern, dass nur der 2. token interessiert.
Der Variablen %%a wird daher der zweite Token zugeordnet, also
System
und dadurch kann der Zielvariablen der gewünscht Wert zugeordnet werden:
set "DriveLabel=%%a"
Bei Angabe von
tokens=1,2
würden der 1. und der 2. token verwendet werden, wobei der erste token der explizit angegebenen Variabel %%a
zugeordnet würde und der zweite token der "Folge"-Variablen %%b
(der nächst höhere Buchstabe).Wenn die Variablen dann wie folgt benutzt würden:
echo %%a=%%b
wäre die Ausgabe
Label=System
was recht witzlos wäre.
(Der verwendete echo-Befehl würde durch die For-Schleife auch auf die Leerzeilen angewendet werden, die der Befehl
wmic volume...
mit ausspuckt.)Da viele Andere auch nicht mit der Syntax des For-Befehls vertraut sind, hat Friemler dazu ein sehr gutes Tutorial geschrieben, was auch die Quelle für meinen Beitrag hier war.
Tutorial zur FOR-Schleife
Dazu an dieser Stelle meinen herzlichen Dank an Friemler.
Gruß Frank
Hallo Frank,
ich war die letzten Tage unterwegs und konnte hier nicht mitlesen/mitschreiben. Schönen Dank für die Erklärung meines Codes, hätte ich nicht besser machen können. Und schön zu lesen, dass mein Tutorial mal wieder bei jemandem zu neuen Erkenntnissen geführt hat.
Deine Lösung (Verwendung des
Als Vorschlag (und kleine Herausforderung zum Nachvollziehen ):
Ich versuche mit diesem Ansatz auch das von Dir schon erkannte Problem der unterschiedlichen Ausgabe des
Grüße
Friemler
ich war die letzten Tage unterwegs und konnte hier nicht mitlesen/mitschreiben. Schönen Dank für die Erklärung meines Codes, hätte ich nicht besser machen können. Und schön zu lesen, dass mein Tutorial mal wieder bei jemandem zu neuen Erkenntnissen geführt hat.
Deine Lösung (Verwendung des
VOL
Befehls) hat auch etwas für sich. Um den WMIC
Befehl benutzen zu können, muss das Benutzerkonto, unter dem der Befehl ausgeführt wird, Mitglied der Benutzergruppe "Administratoren" sein, was nicht immer der Fall ist. Dann ist Deine Lösung mit VOL
besser geeignet. Man könnte den Code aber noch etwas eleganter umsetzen, indem man auch hier die FOR
-Schleife statt eine temporäre Datei verwendet.Als Vorschlag (und kleine Herausforderung zum Nachvollziehen ):
@echo off & setlocal
set "DriveLetter=C:"
for /f "skip=1 tokens=1* delims=:" %%a in ('vol %DriveLetter% ^| findstr /n "^" ^| sort /r') do (
for %%c in (%%b) do (
set "DriveLabel=%%c"
)
)
echo %DriveLabel%
Ich versuche mit diesem Ansatz auch das von Dir schon erkannte Problem der unterschiedlichen Ausgabe des
VOL
Befehls in den verschiedenen Windows UI-Sprachen zu umgehen. Meine Annahme ist, dass in jeder Sprache die Laufwerksbezeichnung das letzte Wort in der ersten Zeile der Ausgabe von VOL
ist.Grüße
Friemler
Hallo Tobias,
per
Eine Möglichkeit ohne
Vorteil dieser Lösung ist, dass der Name des Wochentags immer in der Sprache der Windows Benutzeroberfläche geliefert wird. Allerdings muss die Ausführung des Windows Script Hosts erlaubt sein (kann per GPO verboten werden).
Grüße
Friemler
per
WMIC
gibt es die folgende Möglichkeit, den Wochentag zu ermitteln:@echo off & setlocal
for /f "tokens=2 delims==" %%a in ('wmic path Win32_LocalTime get DayOfWeek /value') do (
set "DOW=%%a"
)
if "%DOW%" equ "0" set "WeekDay=Sonntag"
if "%DOW%" equ "1" set "WeekDay=Montag"
if "%DOW%" equ "2" set "WeekDay=Dienstag"
if "%DOW%" equ "3" set "WeekDay=Mittwoch"
if "%DOW%" equ "4" set "WeekDay=Donnerstag"
if "%DOW%" equ "5" set "WeekDay=Freitag"
if "%DOW%" equ "6" set "WeekDay=Samstag"
echo %WeekDay%
Eine Möglichkeit ohne
WMIC
auszukommen besteht darin, ein Inline-VBScript zu verwenden:@echo off & setlocal
set "VBScript=%TEMP%\GetWeekDay.vbs"
>"%VBScript%" echo WScript.Echo WeekdayName^(Weekday^(Now^)^)
for /f "delims=" %%a in ('cscript /nologo "%VBScript%"') do (
set "WeekDay=%%a"
)
del "%VBScript%"
echo %WeekDay%
Vorteil dieser Lösung ist, dass der Name des Wochentags immer in der Sprache der Windows Benutzeroberfläche geliefert wird. Allerdings muss die Ausführung des Windows Script Hosts erlaubt sein (kann per GPO verboten werden).
Grüße
Friemler
Hallo,
wenn ich davon ausgehen darf, dass
Alternativ zu
funktioniert auch
Den Satz muss ich korrigieren. Er muss so anfangen:
"Meine Annahmen sind...", denn der Satz enthält gleich drei Annahmen.
Beispiel einer deutschen Ausgabe:
"Datenträger in Laufwerk C: ist System"
3. "in der ersten Zeile"
Das ist wahrscheinlich sprachübergreifend einheitlich.
1. "das letzte"
Das trifft vermutlich auf die meisten Sprachen zu.
Yoda würde es allerdings so ausdrücken: "Datenträger in Laufwerk C: System ist"
2. "Wort"
Hier ist das eigentliche Problem:
Bsp.: "Datenträger in Laufwerk C: ist System Platte"
=> DriveLabel = Platte
...gibt es eine Möglichkeit, den Wochentag (z.B. "Montag") aus dem Datum des Rechners abzugreifen, oder übersteigt das die Möglichkeiten von CMD / WMIC?
Eigentlich bin ich ein Freund von Boardmitteln und habe daher auch (mit viel Aufwand) Zeit- und Datums-Berechnungen mit "reinem" cmd gemacht, beispielsweise:
- Ist dieses Jahr Schaltjahr?
- Von wann bis wann ist dieses Jahr Sommerzeit?
- Welches Datum war vor zwei Stunden?
Das lässt sich alles irgendwie mit cmd bewerkstelligen.
Irgendwann war ich den Aufwand aber leid und habe mir ein externen Befehl geschrieben, der mir Datums- und Zeit-Angaben in beliebiger Form ausgibt und (optional) zur Weiterverwendung als Umgebungsvariablen zur Verfügung stellt.
http://www.pedant.de/html/tools_zeitausgabe.php
Im Moment bin ich gerade dabei dem "Befehl" noch die Option zur relativen Zeitverschiebung beizubringen, was auch schon fast fertig ist und wahscheinlich heute noch "online" geht.
Es ist eine kleine, installationsfreie exe, falls Du sie ausprobieren/nutzen möchtest...
Gruß Frank
wenn ich davon ausgehen darf, dass
tokens=1*
gleichbedeutend ist mit tokens=1,* kann ich's nachvollziehen.Alternativ zu
for /f "skip=1 tokens=1* delims=:" %%a in ('vol %DriveLetter% ^| findstr /n "^" ^| sort /r')
funktioniert auch
for /f "tokens=1*" %%a in ('vol %DriveLetter% ^| findstr /i "%DriveLetter%"')
Zitat von @Friemler
Meine Annahme ist, dass in jeder Sprache die Laufwerksbezeichnung das letzte Wort in der ersten Zeile der Ausgabe von
Meine Annahme ist, dass in jeder Sprache die Laufwerksbezeichnung das letzte Wort in der ersten Zeile der Ausgabe von
VOL
ist.Den Satz muss ich korrigieren. Er muss so anfangen:
"Meine Annahmen sind...", denn der Satz enthält gleich drei Annahmen.
Beispiel einer deutschen Ausgabe:
"Datenträger in Laufwerk C: ist System"
3. "in der ersten Zeile"
Das ist wahrscheinlich sprachübergreifend einheitlich.
1. "das letzte"
Das trifft vermutlich auf die meisten Sprachen zu.
Yoda würde es allerdings so ausdrücken: "Datenträger in Laufwerk C: System ist"
2. "Wort"
Hier ist das eigentliche Problem:
Bsp.: "Datenträger in Laufwerk C: ist System Platte"
=> DriveLabel = Platte
...gibt es eine Möglichkeit, den Wochentag (z.B. "Montag") aus dem Datum des Rechners abzugreifen, oder übersteigt das die Möglichkeiten von CMD / WMIC?
Eigentlich bin ich ein Freund von Boardmitteln und habe daher auch (mit viel Aufwand) Zeit- und Datums-Berechnungen mit "reinem" cmd gemacht, beispielsweise:
- Ist dieses Jahr Schaltjahr?
- Von wann bis wann ist dieses Jahr Sommerzeit?
- Welches Datum war vor zwei Stunden?
Das lässt sich alles irgendwie mit cmd bewerkstelligen.
Irgendwann war ich den Aufwand aber leid und habe mir ein externen Befehl geschrieben, der mir Datums- und Zeit-Angaben in beliebiger Form ausgibt und (optional) zur Weiterverwendung als Umgebungsvariablen zur Verfügung stellt.
http://www.pedant.de/html/tools_zeitausgabe.php
Im Moment bin ich gerade dabei dem "Befehl" noch die Option zur relativen Zeitverschiebung beizubringen, was auch schon fast fertig ist und wahscheinlich heute noch "online" geht.
Es ist eine kleine, installationsfreie exe, falls Du sie ausprobieren/nutzen möchtest...
Gruß Frank
Hallo Frank,
Da Yoda "Die Macht" zur Verfügung hat, hat er es nicht nötig Computer zu benutzen und wird deshalb auch nie bei Microsoft angestellt.
Der Gedanke kam mir auch, ich habe jedoch noch eine 4. Annahme gemacht: Der Benutzer hat ein rudimentäres Resthirn im Kopf und unterlässt es, seinen Platten Namen zu geben, die Leerzeichen enthalten. Aber schon klar, man kann nie wissen...
Grüße
Friemler
Da Yoda "Die Macht" zur Verfügung hat, hat er es nicht nötig Computer zu benutzen und wird deshalb auch nie bei Microsoft angestellt.
Der Gedanke kam mir auch, ich habe jedoch noch eine 4. Annahme gemacht: Der Benutzer hat ein rudimentäres Resthirn im Kopf und unterlässt es, seinen Platten Namen zu geben, die Leerzeichen enthalten. Aber schon klar, man kann nie wissen...
Grüße
Friemler
Hallo Tobias und wen es sonst interessieren könnte,
Gruß Frank
Zitat von @Pedant:
Irgendwann war ich den Aufwand aber leid und habe mir einen externen Befehl geschrieben, der mir Datums- und Zeit-Angaben in beliebiger Form ausgibt und (optional) zur Weiterverwendung als Umgebungsvariablen zur Verfügung stellt.
http://www.pedant.de/html/tools_zeitausgabe.php
Im Moment bin ich gerade dabei dem "Befehl" noch die Option zur relativen Zeitverschiebung beizubringen, was auch schon fast fertig ist und wahscheinlich heute noch "online" geht.
Es ist eine kleine, installationsfreie exe, falls Du sie ausprobieren/nutzen möchtest...
Es sind dann doch zwei Tage mehr ins Land gegangen, aber jetzt ist es fertig (inklusive "Handbuch").Irgendwann war ich den Aufwand aber leid und habe mir einen externen Befehl geschrieben, der mir Datums- und Zeit-Angaben in beliebiger Form ausgibt und (optional) zur Weiterverwendung als Umgebungsvariablen zur Verfügung stellt.
http://www.pedant.de/html/tools_zeitausgabe.php
Im Moment bin ich gerade dabei dem "Befehl" noch die Option zur relativen Zeitverschiebung beizubringen, was auch schon fast fertig ist und wahscheinlich heute noch "online" geht.
Es ist eine kleine, installationsfreie exe, falls Du sie ausprobieren/nutzen möchtest...
Gruß Frank
Hallo Frank,
sieht erstmal aus, als könnte das Tool wirklich nützlich sein. Habe es auf jeden Fall mal runtergeladen aber noch nicht getestet.
Was ich nicht so gelungen finde ist:
a) Der deutsche Name.
b) Die auf deutsch benannten Optionen und Schalter.
Batchscript und allgemein alle Programmiersprachen sind auf englisch gehalten, mich stören deshalb nicht-englische Befehle/Bezeichner/Optionen usw. im Quellcode. Aber das ist natürlich Geschmackssache.
Grüße
Friemler
sieht erstmal aus, als könnte das Tool wirklich nützlich sein. Habe es auf jeden Fall mal runtergeladen aber noch nicht getestet.
Was ich nicht so gelungen finde ist:
a) Der deutsche Name.
b) Die auf deutsch benannten Optionen und Schalter.
Batchscript und allgemein alle Programmiersprachen sind auf englisch gehalten, mich stören deshalb nicht-englische Befehle/Bezeichner/Optionen usw. im Quellcode. Aber das ist natürlich Geschmackssache.
Grüße
Friemler
Hallo Friemler,
Wenn Du es also ausprobieren und nutzen möchtest, solltest Du die neue Version runterladen.
Ich weiß was Du meinst und ja, die "Amtssprache" in der IT ist Englisch.
Bei den Tools, die ich im wesentlichen für mich programmiere (auch wenn ich ein paar davon auf meiner Seite zum Download anbiete) entscheide ich mich dennoch meist für eine deutsche Version und zwar mit folgenden Gründen:
Ein Software und sei es nur ein kleines Tool, braucht ein Handbuch.
Würde ich das Handbuch auf Englisch verfassen, müsste ich es mit "Leo" schreiben und meine "Kunden" müssten es vermutlich mit "Leo" lesen.
Ich meine, welcher Ausländer verirrt sich schon auf pedant.de?
Meine "Kunden" sind also deutschsprachig und ich auch.
Es wäre daher irgendwie albern alles hin und her zu überstetzen, nur damit es international wäre, obwohl es nie international sein wird.
Erstellung, Nutzung und eventueller Support funktionieren daher viel besser, wenn alles auf Deutsch ist.
Es hat auch einen (denselben) Grund, warum die Boardsprache auf administrator.de Deutsch ist, obwohl viele der diskutierten Inhalte spachunabhängig interessant sind.
Ja, das ist es und daher ist meine Erklärung hier keine "Verteidigung" sondern lediglich eine Erklärung und Deine Einwände verstand ich auch nicht als Angriff.
Deutsch im Quellcode hat übrigens einen Vorteil.
Ich kann leicht zwischen reservierten Begriffen und frei wählbaren Benennungen unterscheiden.
Wenn ich also ein Syntax-Beispiel wie dieses finde:
bin ich verunsichert und probiere rum oder suche weiter bis ich sowas finde:
Gruß Frank
PS: Es würd mich freuen, wenn Du Dich dennoch mit dem Tool anfreunden kannst und es Dir ebenso gute Dienste leistet wie mir.
Für Feature Requests wäre ich auch offen, was die Sprache angeht: Wenn Du das Handbuch übersetzt, schreib ich das Tool auf Englisch um.
Zitat von @Friemler:
sieht erstmal aus, als könnte das Tool wirklich nützlich sein. Habe es auf jeden Fall mal runtergeladen aber noch nicht getestet.
Ich hab seither das Tool und das Handbuch überarbeitet. Es waren doch noch ein paar Fehler drin und ein paar Ergänzungen kamen dabei auch hinzu.sieht erstmal aus, als könnte das Tool wirklich nützlich sein. Habe es auf jeden Fall mal runtergeladen aber noch nicht getestet.
Wenn Du es also ausprobieren und nutzen möchtest, solltest Du die neue Version runterladen.
Zitat von @Friemler:
Was ich nicht so gelungen finde ist:
a) Der deutsche Name.
b) Die auf deutsch benannten Optionen und Schalter.
Batchscript und allgemein alle Programmiersprachen sind auf englisch gehalten, mich stören deshalb nicht-englische Befehle/Bezeichner/Optionen usw. im Quellcode. Aber das ist natürlich Geschmackssache.
Wenn's nur der Name wäre: Was ich nicht so gelungen finde ist:
a) Der deutsche Name.
b) Die auf deutsch benannten Optionen und Schalter.
Batchscript und allgemein alle Programmiersprachen sind auf englisch gehalten, mich stören deshalb nicht-englische Befehle/Bezeichner/Optionen usw. im Quellcode. Aber das ist natürlich Geschmackssache.
ren Zeitausgabe.exe timeoutput.exe
Ich weiß was Du meinst und ja, die "Amtssprache" in der IT ist Englisch.
Bei den Tools, die ich im wesentlichen für mich programmiere (auch wenn ich ein paar davon auf meiner Seite zum Download anbiete) entscheide ich mich dennoch meist für eine deutsche Version und zwar mit folgenden Gründen:
Ein Software und sei es nur ein kleines Tool, braucht ein Handbuch.
Würde ich das Handbuch auf Englisch verfassen, müsste ich es mit "Leo" schreiben und meine "Kunden" müssten es vermutlich mit "Leo" lesen.
Ich meine, welcher Ausländer verirrt sich schon auf pedant.de?
Meine "Kunden" sind also deutschsprachig und ich auch.
Es wäre daher irgendwie albern alles hin und her zu überstetzen, nur damit es international wäre, obwohl es nie international sein wird.
Erstellung, Nutzung und eventueller Support funktionieren daher viel besser, wenn alles auf Deutsch ist.
Es hat auch einen (denselben) Grund, warum die Boardsprache auf administrator.de Deutsch ist, obwohl viele der diskutierten Inhalte spachunabhängig interessant sind.
Ja, das ist es und daher ist meine Erklärung hier keine "Verteidigung" sondern lediglich eine Erklärung und Deine Einwände verstand ich auch nicht als Angriff.
Deutsch im Quellcode hat übrigens einen Vorteil.
Ich kann leicht zwischen reservierten Begriffen und frei wählbaren Benennungen unterscheiden.
Wenn ich also ein Syntax-Beispiel wie dieses finde:
List<string> newList = new List<string>();
bin ich verunsichert und probiere rum oder suche weiter bis ich sowas finde:
List<string> MeineListe = new List<string>();
Gruß Frank
PS: Es würd mich freuen, wenn Du Dich dennoch mit dem Tool anfreunden kannst und es Dir ebenso gute Dienste leistet wie mir.
Für Feature Requests wäre ich auch offen, was die Sprache angeht: Wenn Du das Handbuch übersetzt, schreib ich das Tool auf Englisch um.
Hallo Frank,
danke für das Update. Ich habe jetzt mal ein bisschen mit dem Tool rumgespielt und es hat gut funktioniert. Besonders die Möglichkeiten mit Zeit - und Datumswerten zu rechnen gefallen mir.
Nochmal zum Thema Sprache: Ich finde nicht, dass der Hilfetext, den das Tool durch den Parameter
Grüße
Friemler
danke für das Update. Ich habe jetzt mal ein bisschen mit dem Tool rumgespielt und es hat gut funktioniert. Besonders die Möglichkeiten mit Zeit - und Datumswerten zu rechnen gefallen mir.
Nochmal zum Thema Sprache: Ich finde nicht, dass der Hilfetext, den das Tool durch den Parameter
/?
anzeigt oder gar Deine Internetseite übersetzt werden müsste. Ich meinte lediglich solche Schalter wie datum
, datumzeit
, wt
, jt
, usw. Außerdem, Kürzel wie d
, y
, h
, H
, usw. basieren ja auch nicht auf deutschen Wörtern ...Grüße
Friemler
Zitat von @Friemler:
Nochmal zum Thema Sprache: ... Ich meinte lediglich solche Schalter wie
Wie heißt es so schön: "Der Kunde ist König." oder anders gesagt:Nochmal zum Thema Sprache: ... Ich meinte lediglich solche Schalter wie
datum
, datumzeit
, wt
, jt
, usw. Außerdem, Kürzel wie d
, y
, h
, H
, usw. basieren ja auch nicht auf deutschen Wörtern ...Deine blöden Schalter habe ich übersetzt.
http://www.pedant.de/html/download.php?datei=zeitausgabe&version=19 ...
Das Argument mit der Inkonsistenz zu
d
, y
, h
, H
war durchaus treffend.Den Präfix "za" bei den Umgebungsvariablen habe ich allerdings belassen, da ich es recht praktisch finde, dass sie am Ende des Alphabeths angesiedelt sind.
Die Exe kannst Du nach Belieben umbenennen. Vielleicht hast Du ja auch einen englichen Namensvorschlag, der mir zusagt.
Zitat von @Friemler:
Ich finde nicht, dass der Hilfetext, den das Tool durch den Parameter
Das Online-Handbuch werde ich tatsächlich nicht übersetzten, nur entsprechend der Änderungen noch überarbeiten, aber...Ich finde nicht, dass der Hilfetext, den das Tool durch den Parameter
/?
anzeigt oder gar Deine Internetseite übersetzt werden müsste.Die Programmsprache (Hilfe und Fehlermeldungen) ist auf Systemen mit deutschem Windows-UI jetzt Deutsch und auf allen anderen Englisch.
Mit
/l de|en
kann man allerdings, unabhängig von Windows-UI, die Sprache wählen.Die hier verlinkte Version ist noch nicht online vorgestellt, Vermutlich hat sie auch noch ein paar Bugs, ob der Umbenennungen und der Zweisprachigkeit. Ich werd auf jeden Fall noch einige Tests machen, bevor ich sie veröffentliche.
Ich hab sie nur schon mal hochgeladen, um zu fragen, ob Du's Dir so vorgestellt hattest.
Gruß Frank
PS: Wessen Thread ist das hier eigentlich?
Hey Frank,
Und da ich auch ein kleiner Pedant bin: Wie wäre es, wenn Du Dir den Namen der EXE aus argv holst und diesen Wert bei der Ausgabe des Hilfetextes und bei Fehlermeldungen verwendest?
Grüße
Friemler
Deine blöden Schalter habe ich übersetzt.
Yeah!Die Exe kannst Du nach Belieben umbenennen. Vielleicht hast Du ja auch einen englichen Namensvorschlag, der mir zusagt.
Na ja, in der Kürze liegt die Würze, gerade auf der Konsole. Mir fiel auf die Schnelle (ich habe für meine Tests die EXE bereits umbenannt ) ganz profan DTTool (für DateTimeTool) ein.Und da ich auch ein kleiner Pedant bin: Wie wäre es, wenn Du Dir den Namen der EXE aus argv holst und diesen Wert bei der Ausgabe des Hilfetextes und bei Fehlermeldungen verwendest?
Die Programmsprache (Hilfe und Fehlermeldungen) ist auf Systemen mit deutschem Windows-UI jetzt Deutsch und auf allen anderen
Englisch. Mit
Wow, ich bin echt beeindruckt!Englisch. Mit
/l de|en
kann man allerdings, unabhängig von Windows-UI, die Sprache wählen.PS: Wessen Thread ist das hier eigentlich?
Habe ich mich auch schon gefragt. Evtl. sollten wir das per PM fortsetzen.Grüße
Friemler
Hallo Friemler,
Ich denk mal drüber nach.
Ist es Dir nicht aufgefallen oder funktioniert es bei Dir nicht und Du erhälst nur die Vorbelegung der dafür vorgesehenen Variablen?
Ich mache es so, da das den tatsächlichen Dateinamen liefert (liefern sollte):
<code type="plain>private static string programmname = "Zeitausgabe";
...
public static void Main(string args)
{
programmname = Process.GetCurrentProcess().MainModule.FileName;
programmname = Path.GetFileNameWithoutExtension(programmname);
Bei Argument erhält man den aufrufenden Befehl und der kann auch abweichend sein.
Beispiele:
<code type="plain>string p = Environment.GetCommandLineArgs();
Console.WriteLine("p: " + p);
Ab jetzt gerne per PN oder auch gerne per E-Mail (siehe Online-Handbuch), wie's Dir lieber ist.
Gruß Frank
Ich denk mal drüber nach.
Zitat von @Friemler:
ich habe für meine Tests die EXE bereits umbenannt...
... da ich auch ein kleiner Pedant bin: Wie wäre es, wenn Du Dir den Namen der EXE aus argv holst und diesen Wert bei der Ausgabe des Hilfetextes und bei Fehlermeldungen verwendest?
Da ich der Pedant bin, ist das doch schon drin.ich habe für meine Tests die EXE bereits umbenannt...
... da ich auch ein kleiner Pedant bin: Wie wäre es, wenn Du Dir den Namen der EXE aus argv holst und diesen Wert bei der Ausgabe des Hilfetextes und bei Fehlermeldungen verwendest?
Ist es Dir nicht aufgefallen oder funktioniert es bei Dir nicht und Du erhälst nur die Vorbelegung der dafür vorgesehenen Variablen?
Ich mache es so, da das den tatsächlichen Dateinamen liefert (liefern sollte):
<code type="plain>private static string programmname = "Zeitausgabe";
...
public static void Main(string args)
{
programmname = Process.GetCurrentProcess().MainModule.FileName;
programmname = Path.GetFileNameWithoutExtension(programmname);
Bei Argument erhält man den aufrufenden Befehl und der kann auch abweichend sein.
Beispiele:
Zeitausgabe
, zeitausgabe
und zEiTaUsGaBe
ruft Zeitausgabe
auf<code type="plain>string p = Environment.GetCommandLineArgs();
Console.WriteLine("p: " + p);
Ab jetzt gerne per PN oder auch gerne per E-Mail (siehe Online-Handbuch), wie's Dir lieber ist.
Gruß Frank