miniversum
Goto Top

Volume in ... und Datenträger in ... bei Dir Befehl hängt von Laufwerk ab?

Hallo
Ich habe eine solche Problematik bzw. Frage wie meine hier im Forum nicht gefunden und daher Frag ich einfach mal ob es mir jemand erklären kann und hoffe das der lange Text nicht abschreckt...

Ich habe Festgestellt das ich beim aufrufen des dir Befehls bei meinem PC in der Kopfzeile den Text "Datenträger in Laufwerk H: ... " stehen habe, wenn ich den Befehl auf meinen einen USB Stick oder Festplatte anwende. Wende ich den Befehl auf meinem zweiten USB Stick an oder auf dem PC eines Freundes steht da aber "Volume in Laufwerk H: ... ".
Mein Windows und das Windows meines Freundes sind beide in deutsch und auch auf dem gleichen Stand. Nun habe ich mich gefragt woher der Unterschied kommt. Mit der Formatierung der USB Sticks oder der Festplatte hat es nichts zu tun, da beide USB Sticks FAT32 sind.

Die Erklärung warum ich es in diesem Bereich schreibe ist folgende:
Ich möchte per Batch der letzte Ã"nderungsdatum einer Datei (Dateiname.txt) auslesen und anzeigen. Dies mache ich mit folgendem Befehl:

for /F "tokens=1,2 delims= " %%f in ('dir /a-D /Tw /-C Dateiname.txt^|find "."') do echo Stand: %%f %%g

Dies funktioniert auch ohne Probleme wenn beim dir Aufruf "Datenträger in Laufwerk H: ... " in der Kopfzeile steht. Die Ausgabe lautet dann z.B. so:

Stand: 27.02.2006 10:17

Wenn er Dir Aufruf allerdings "Volume in Laufwerk H: ... " in der Kopfzeile hat erscheint folgendes:

Stand: Volume in
Stand: 27.02.2006 10:17

Was bei weiterem verfolgenden der "Volume in Laufwerk H: ... " Zeile entspricht.

Das Problem habe ich zwar gelöst das es mir bei beiden immer nur die letzte Zeile anzeigt, aber es würde mich trotzdem interessieren wie diese unterschiedliche Anzeige zu stande kommt?
Ich lerne gerne dazu...

miniversum
(Dominik)

Content-Key: 27055

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

Printed on: April 23, 2024 at 16:04 o'clock

Member: Biber
Biber Feb 28, 2006 at 14:12:15 (UTC)
Goto Top
Moin Dominik,

da kann ich auch nur eine halbe Antwort versuchen.

Zur Teilfrage "wieso heißt das manchmal "Datenträger" und mal "Volume" und mal "Laufwerk" ... frag mich nicht... da ist keine Gesetzmäßigkeit erkennbar.
Ist wahrscheinlich eine zusammengeschlamperte Raubkopie aus Taiwan - kauf nächstes Mal lieber das qualitätsgeprüfte M$-Original... face-wink

Die andere Teilfrage: Wie löse ich das... da kann ich gerne helfen.
a) bei dem DIR noch den Parameter "/b" benutzen (dann hast du weder "Volume" noch "Laufwerk" ..
-oder-
b) bei der FOR-Anweisung ein "skip=2" einbauen....
- oder-
c) Die Ausgabe mit Find.exe auf "Volume" oder "Datentr" oder "Laufwerk" untersuchen...

Gruß Biber
Member: miniversum
miniversum Feb 28, 2006 at 15:59:27 (UTC)
Goto Top
Danke für die Antwort.

Ist wahrscheinlich eine
zusammengeschlamperte Raubkopie aus Taiwan -
kauf nächstes Mal lieber das
qualitätsgeprüfte M$-Original...
face-wink

Ist ein Orginal! Direkt von MS ohne das ein doofer Verkäufer das ding jemals in der Hand hatte face-smile


a) bei dem DIR noch den Parameter
"/b" benutzen (dann hast du weder
"Volume" noch "Laufwerk"
..

mit /b dabei zeigt er nicht mehr das Datum oder Uhrzeit an sondern den Dateinamen....

-oder-
b) bei der FOR-Anweisung ein
"skip=2" einbauen....
- oder-

Da zeigt er mir garnix mehr an....

Aber wie geschrieben habs gelöst.. Danke trotzdem..

Dominik
Member: Biber
Biber Feb 28, 2006 at 16:18:54 (UTC)
Goto Top
ähmm.. ja, Dominik,

mit dem "Skip=2" hast Du Recht.. das bringt in Verbindung mit dem "find "." tatsächlich nichts.
~~~
Die Variante mit dem "dir /b" meinte ich so:
for /F %%f in ('dir /b /a-D dateiname.txt') do echo Stand: %%~tf

Finde ich kürzer und übersichtlicher.


Tz, tz ... und das jetzt schon auf Original-M$-CDs rumgeschlampt wird, erschüttert mich nun aber wirklich... face-wink

Gruß
Frank / der Biber aus Bremen
Member: miniversum
miniversum Feb 28, 2006 at 16:27:42 (UTC)
Goto Top
hmm.. ok danke funktioniert..
Kannst du mir als doofer kleiner Mensch jetztr auch mal erklären wie das geht?
wenn ich nur direkt
dir /b /a-D dateiname.txt
eingeben zeigts ja nur den Dateinamen an.
Was macht das %%~tf ?

Danke für die Hilfe!
Dominik
Member: Biber
Biber Feb 28, 2006 at 16:51:50 (UTC)
Goto Top
Moin Dominik,

die Formulierung
Kannst du mir als doofer kleiner Mensch...

..ist einfach genial.. die kann ebenso auf den Fragenden bezogen sein wie auf den Befragten.. den Satz merke ich mir für die nächsten Personalgespräche..
"Chef, können Sie mir mal als Schafsnase erklären, warum ich nur ein Achtel von Ihrem Gehalt bekomme?"...*gg ...freue mich jetzt schon drauf...

Back to thread...

Unter anderem in der Hilfe zur FOR..IN..DO-Anweisung sind die Möglichkeiten aufgeführt:
$cmd$ For /?
...

Zusätzlich wurde die Ersetzung von Verweisen auf FOR-Variablen erweitert.
Sie können jetzt folgende Syntax verwenden:

%~I - Expandiert %I und entfernt alle umschließenden
Anführungszeichen (").
%~fI - Expandiert %I zu einem vollständigen Dateinamen.
%~dI - Erzeugt nur den Laufwerkbuchstaben von %I.
%~pI - Erzeugt nur den Pfad von %I.
%~nI - Erzeugt nur den Dateinamen von %I.
%~xI - Erzeugt nur die Dateierweiterung von %I.
%~sI - Erzeugter Pfad enthält nur kurze Dateinamen.
%~aI - Erzeugt die Dateiattribute von %I.
%~tI - Erzeugt Datum und Zeit von %I.
%~zI - Erzeugt die Dateigröße von %I.

Gute Beispiele für die Anwendung findest Du hier im Bereich "Batch & Shell" vor allem bei Batch-Aufgaben mit XCopy/Backups und bei Synchronisationsaufgaben (Dateiliste und Laufwerksinhalt vergleichen oder auch Inhalt von Original- und Backupverzeichnis).

Grüße
Biber
Member: miniversum
miniversum Feb 28, 2006 at 17:13:08 (UTC)
Goto Top
Danke! Hab ich woll beim druchblättern der Hilfe übersehen...
Member: miniversum
miniversum Mar 05, 2006 at 11:40:10 (UTC)
Goto Top
Nachtrag.....

for /F %%f in ('dir /b /a-D dateiname.txt') do echo Stand: %%~tf

... funktioniert problemlos.

Jetzt habe ich aber die Batch so verändert das der Dateiname nicht mehr fest ist und so die Vatiable %Dateiname% verwende, also:

for /F %%f in ('dir /b /a-D %Dateiname%') do echo Stand: %%~tf

Das funktioniert auch solange der Name der Datei der in %Dateiname% gespeichert ist keine Leerstellen enthällt.
Sind Leerstellen vorhanden (z.B. echo %Dateiname% -> meine Datei.txt) funktioniert die For-Schleife nicht und der Dir befehl findet den Dateinamen nicht.

Das geht doch bestimmt auch mit langen Dateinamen mit Leerzeichen oder?

Dominik
Member: Biber
Biber Mar 05, 2006 at 14:13:11 (UTC)
Goto Top
Moin miniversum,

einfach den %Dateiname% in Anführungszeichen setzen (wenn es nur EINE Datei ist).
Also:
Set "Dateiname=c:\Dokumente und SonZeug\miniversum\test\Tageshoroskop.txt"
for /F %%f in ('dir /b /s /a-D "%Dateiname%"') do echo Stand: %%~tf

HTH Biber
[Edit]
Sorry, hier fehlt das "delims=" in der FOR..IN..DO-Anweisung.
Kommt vom ungetesteten Posten.
Richtiger:
for /F "delims=" %%f in ('dir /b /s.....
[/Edit]
Member: miniversum
miniversum Mar 05, 2006 at 16:03:56 (UTC)
Goto Top
Diese Idee hatte ich auch schon.
Das Ergebnis ist das die Variable %Dateiname% nichts mehr drinsteht und er daher auch keine Datei findet um das Datum anzuzeigen.

Hier meine Bisherigen Ideen:

@echo off
cls
Set Dateiname="Neu Textdokument.txt"

echo 1 x%Dateiname%x

if /I not exist %Dateiname% Set Dateiname="%Dateiname%.txt"

echo 2 x%Dateiname%x

::for /F "tokens=1*" %%f in ('dir /b /a-D "%Dateiname%"') do Set Dateiname1=%%f %%g

echo 3 x%Dateiname%x%Dateiname1%x

for /F %%f in ('dir /b /a-D %Dateiname%') do Set Dateiname2=%%f

echo 4 x%Dateiname%x%Dateiname1%x%Dateiname2%x

for /F %%f in ('dir /b /a-D %Dateiname%') do echo Stand: %%~tf

echo.
pause

Dominik
Member: Biber
Biber Mar 05, 2006 at 16:35:13 (UTC)
Goto Top
Moin Dominik,
probier es mal so bitte:

@echo off
cls
Set "Dateiname=Neu Textdokument.txt"

echo 1 Dateiname ist: [%Dateiname%]
echo if /I not exist "%Dateiname%" Set "Dateiname=%Dateiname%.txt"
if /I not exist "%Dateiname%" Set "Dateiname=%Dateiname%.txt"

echo 2 Dateiname ist: [%Dateiname%]

for /F "tokens=1,*" %%f in ('dir /b /a-D "%Dateiname%"') do Set "Dateiname1=%%f %%g"
echo 3 Dateiname1/2: [%Dateiname%][%Dateiname1%]

for /F "delims=" %%f in ('dir /b /a-D "%Dateiname%"') do Set "Dateiname2=%%f"
echo 4 Dateiname/1/2: [%Dateiname%][%Dateiname1%][%Dateiname2%]

for /F "delims=" %%f in ('dir /b /s /a-D "%Dateiname%"') do echo %%~tf

Sollte bei dir sinngemäß ergeben:
1 Dateiname ist: [Neu Textdokument.txt]
if /I not exist "Neu Textdokument.txt" Set "Dateiname=Neu Textdokument.txt.txt"

2 Dateiname ist: [Neu Textdokument.txt]
3 Dateiname1/2: [Neu Textdokument.txt][Neu Textdokument.txt]
4 Dateiname/1/2: [Neu Textdokument.txt][Neu Textdokument.txt][Neu Textdokument.txt]

Stand: 05.03.06 17:16

(bei existierendem "Neu textdokument.txt".)

Gruß
Biber
Member: miniversum
miniversum Mar 07, 2006 at 18:20:17 (UTC)
Goto Top
Danke.. ne kleine Änderung muste ich machen.. mit der txt Datei hats funktioniert, mit ner bat Datei nicht ganz.. aber war nur ne Kleineigkeit.
Danke

Dominik
Member: miniversum
miniversum Mar 09, 2006 at 19:01:08 (UTC)
Goto Top
so hier nun endlich Die getestete und mit ner .bat Datei funktionierende Version... Damit schließe ich das jetzt auch.

@echo off
cls

Set Dateiname=Neu Textdokument
echo 1 Dateiname ist: [%Dateiname%]

if /I not exist "%Dateiname%" Set "Dateiname=%Dateiname%.bat"
echo 2 Dateiname ist: [%Dateiname%]

for /F "tokens=1,*" %%f in ('dir /b /a-D "%Dateiname%"') do Set "Dateiname1=%%f %%g"
echo 3 Dateiname1/2: [%Dateiname%][%Dateiname1%]

for /F "delims=" %%f in ('dir /b /a-D "%Dateiname%"') do Set "Dateinam2=%%f"
echo 4 Dateiname/1/2: [%Dateiname%][%Dateiname1%][%Dateiname2%]

for /F "delims=" %%f in ('dir /b /a-D "%Dateiname%"') do echo %%~tf

pause

Dominik