progfreund
Goto Top

Batch Umwandlung von short file names in long file names und umgekehrt

Wie kann man den short file name von %TEMP% in einen long file name umwandeln/bestimmen und als Variable(n) speichern?
Wie kann man allgemein einen short file name in einen long file name umwandeln?

Hallo.
Ich möchte die Umgebnungsvariable %TEMP% als Speicherort wählen und verarbeiten, nur wird der Pfad
abgekürzt nach der 8.3-Regel. Ich wollte die long file names des Pfads haben, um den Pfad durch delims=\
zu zerlegen und zu vergleichen.
Deshalb wollte ich bei short file names durch die Navigation durch relative Pfade die absoluten Pfade als long file names bestimmen, was verständlicherweise nicht geht.
Welche Möglichkeiten gibt es, den short file name von %TEMP% in einen long file name umzuwandeln bzw. allgemein
einen short file name in einen long file name umzuwandeln?

LG face-smile

echo off
echo hallo>>%TEMP%\Hallo.txt ::allgemeines Prinzip, nur um eine Datei im Ordner zu speichern.
exit
cd %TEMP%
cd .\..
cd .\..
cd .\.. ::bringt nichts, weil der Username immer noch im 8:3 Format ist.
echo %SYSTEMDRIVE%
echo %USERNAME%
set "Speicherpfad=%SYSTEMDRIVE%\Users\%USERNAME%\AppData\Local\Temp" ::jeder kann sich seine Umgebungsvariable individuell einstellen, daher nicht allgemein.  

Content-Key: 168498

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

Printed on: April 24, 2024 at 09:04 o'clock

Mitglied: 60730
60730 Jun 22, 2011 at 16:50:50 (UTC)
Goto Top
hi,
wie machst du das?
Member: Clijsters
Clijsters Jun 22, 2011 at 17:10:12 (UTC)
Goto Top
Zitat von @Progfreund:
Hallo.
Hallo
Ich möchte die Umgebnungsvariable %TEMP% als Speicherort wählen und verarbeiten
Das geht. Ist auch nicht schwer.
nur wird der Pfad abgekürzt nach der 8.3-Formel.
Ist das ein Problem?
Deshalb möchte ich relative Pfade in absolute Pfade umwandeln.
Was hat denn das mit deinem "Problem" zu tun?
Gibt es eine Regel für das Setzen von relativen bzw. absoluten Pfaden und die Rekonvertierung?
oO?! s.o.

LG face-smile
Gruß
Dominique
Member: Progfreund
Progfreund Jun 22, 2011 at 18:31:13 (UTC)
Goto Top
Zitat von @Clijsters:
Das geht. Ist auch nicht schwer.
Na, da bin ich mal gespannt. >>%TEMP% ;)
Ist das ein Problem?
Ja.
Was hat denn das mit deinem "Problem" zu tun?
s.o.

Und wenn noch wer richtige Tipps hat, bitte nur rein.
Mitglied: 60730
60730 Jun 22, 2011 at 19:06:25 (UTC)
Goto Top
Zitat von @Progfreund:
Na, da bin ich mal gespannt. >>%TEMP% ;)
Und wenn noch wer richtige Tipps hat, bitte nur rein.


  • mea culpa - aber ehrlich - muss das sein?

  • halbfertige Fragen stellen ist ja schon die halbe Miete, gezielte Gegenfragen zu ignorieren der Rest...

for /f "tokens=2,*" %a in ('reg query HKCU\Environment ^|find /i "temp"') do echo %b  

Und immer noch stellt sich die Frage - wo ist das Problem?


Ich melde mich erst wieder, wenn die Ferien vorbei sind - macht ja derzeit gar keinen Sinn...
Member: bastla
bastla Jun 22, 2011 at 20:22:33 (UTC)
Goto Top
Hallo Progfreund!

Sorry - ich verstehe auch nicht, was Du eigentlich willst (bzw was mit 8.3-Namen nicht mindestens genauso gut möglich wäre); auch was ">>%TEMP%" sollte, ist mir nicht klar (eine Umleitung der Ausgabe mit einem Ordner als Ziel kann ja auch für andere Ordner nicht funktionieren), und wenn Du eine Datei in diesem Ordner ("%TEMP%\Datei.txt") als Ziel wählst, sehe ich das Problem nicht ...
Deine Verwendung der Begriffe "relativer" bzw "absoluter" Pfad, finde ich übrigens, äh, gewöhnungsbedürftig ...

Grüße
bastla
Member: Progfreund
Progfreund Jun 22, 2011 at 20:42:17 (UTC)
Goto Top
Danke, TimoBeil.

@bastla: es sollte >>%TEMP%\Datei.txt sein.
Die Abfrage nach den Umgebungsvariablen sollte dazu dienen, in Fällen, in denen ein
Speichern dort nicht möglich ist, eine andere Umgebungsvariable zu wählen.
Welche Begriffe verwendest du für beide Varianten?

Erklärung:
User Umgebungsvariablen sind in der registry gespeichert unter:
HKEY_CURRENT_USER\Environment
Systemvariablen sind in der registry gepeichert unter:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment
Die untere FOR-Schleife durchsucht die Registrierung unter dem o.g. Register nach der Zeichenkette "temp" und gibt sie wieder.
for /f "tokens=2,*" %a in ('reg query HKCU\Environment ^|find /i "temp"') do echo %b  

Auskunft zu reg query
(siehe Kommandozeile: )
reg /?
REG Befehl [Parameterliste]

  Befehl  [ QUERY   | ADD    | DELETE  | COPY    |
            SAVE    | LOAD   | UNLOAD  | RESTORE |
            COMPARE | EXPORT | IMPORT  | FLAGS ]

Rückgabecode: (Mit Ausnahme von REG COMPARE)

  0 - Erfolgreich
  1 - Fehlgeschlagen

Geben Sie Folgendes ein, um die Hilfe für einen Befehl anzuzeigen:

  REG Befehl /?

Beispiele:

  REG QUERY /?
  REG ADD /?
  REG DELETE /?
  REG COPY /?
  REG SAVE /?
  REG RESTORE /?
  REG LOAD /?
  REG UNLOAD /?
  REG COMPARE /?
  REG EXPORT /?
  REG IMPORT /?
Member: bastla
bastla Jun 22, 2011 at 20:50:32 (UTC)
Goto Top
Hallo Progfreund!
Die Abfrage nach den Umgebungsvariablen sollte dazu dienen, in Fällen, in denen ein
Speichern dort nicht möglich ist, eine andere Umgebungsvariable zu wählen.
Bleibt für mich weiterhin unverständlich - wieso sollte ein Speichern dort nicht möglich sein, und welche "andere Umgebungsvariable" würdest Du dann wählen?
Welche Begriffe verwendest du für beide Varianten?
Ich weiß ja noch nicht einmal, welche Varianten Du meinst (und auch noch immer nicht, wobei Dir 8.3-Namen Probleme bereiten) ...

... aber ein relativer Pfad wäre zB
..\Nebenordner\Nebenunterordner
- ich muss nur wissen, wie ich vom Ausgangspfad zum Zielpfad komme (hier eben: eine Ordnerebene nach oben, und dann in "Nebenordner" und von dort aus in "Nebenunterordner"), aber nicht, ob sich dieser Zielpfad unterhalb von "D:\" oder von "X:\Was\weiss\ich\wo" (= jeweils "absolut") befindet ...

Grüße
bastla
Member: Progfreund
Progfreund Jun 22, 2011 at 21:13:31 (UTC)
Goto Top
Danke, bastla.

Ich habe die Navigation mit .\.. ersetzt durch die Abfrage der Umgebungsvariablen %TEMP%.
Vorher habe ich überlegt, es anders zu machen, daher die Frage.
Der Beitrag ist nun gelöst, da oben durch die FOR-Schleife ein long file name abgefragt werden kann und der Versuch durch
Navigation mit cd .\.. bzw. cd .. der short file name nicht wie gewollt durch den long file name ersetzt werden kann. Desweiteren
habe ich unten eine Anleitung zur Konvertierung von long file names zu short file names beigefügt.
Die long file names lassen sich aus der registry entnehmen, die short file names lassen sich entnehmen aus z.B. echo %TEMP% bzw. lassen sich
manuell erstellen.

Zu den 8.3 Namen:
short filename:
C:\Users\TestUs~1\AppData\Local\Temp
long filename:
C:\Users\TestUser\AppData\Local\Temp
dir /x  ::short names und falls vorhanden long file names
dir /-n ::nur short file names

Konvertierung eines long file name in einen short file name nach der 8.3 Regel:

- ein short file name kann maximal 8 Zeichen vor dem Punkt haben.
- Hat der long file name mehr als 8 Zeichen, dann schreibe die ersten 6 Namenszeichen,
  dann ein Tilde-Zeichen (~) als 7. Zeichen und eine Zahl, meist 1 als 8. Zeichen.
- Die Nummer hinter dem Tilde-Zeichen (~) unterscheidet den short file name von
  anderen file names, die am Anfang auch 6 Zeichen haben und dieselbe Endung haben.

- Punkte in Namen sind sehr wichtig, sie müssen auch für Ordner verwendet werden,
  sofern diese einen Punkt im Namen haben.
- Wenn es mehrere Punkte im Datei- oder Ordnernamen gibt, wird nur der letzte verwendet,
  die voranstehenden Punkte werden nicht beachtet.
- Wenn es mehr als drei Punkte hinter dem letzten Punkt gibt, werden nur die ersten drei
  verwendet.

  Allgemein gilt:
- Leerzeichen in Datei- und Ordnernamen sollten bei der Konvertierung nicht beachtet werden,
  sie werden ausgelassen.
- Punkte in Datei- und Ordnernamen werden bis auf den letzten Punkt nicht beachtet und ebenso
  ausgelassen wie Leerzeichen.
- Kommata und eckige Klammern ( [ und ] ) werden als Unterstrich ( _ ) geschrieben.
- Groß- und Kleinschreibung ist nicht bedeutend, beide werden gleich behandelt.
Member: bastla
bastla Jun 22, 2011 at 21:22:49 (UTC)
Goto Top
Hallo Progfreund!

Danke für die Information, aber mir ist schon klar, wie 8.3-Namen aussehen face-wink - was ich nicht verstehe, ist, was Dich daran stört / Dir Probleme bereitet (da ganz im Gegenteil die Kurzschreibweise im Zweifelsfall nützlich ist, weil darin weder Leerzeichen noch zB Umlaute - etwa bei "Startmenü" - vorkommen) ...
Ich habe die Navigation mit .\.. ersetzt durch die Abfrage der Umgebungsvariablen %TEMP%.
Abgesehen davon, dass anstelle von ".\.." auch, wie oben gezeigt, ".." genügt, war das nur ein Beispiel für eine typische Verwendung relativer Pfade - auch
Unterordner\Unterunterordner
ist (bezogen auf einen Ausgangspfad) ein relativer Pfad - absolut würde er zB so aussehen:
D:\Daten\Abteilung4\Unterordner\Unterunterordner
Grüße
bastla
Member: Clijsters
Clijsters Jun 22, 2011 at 21:37:05 (UTC)
Goto Top
Zitat von @Progfreund:
> Zitat von @Clijsters:
> Das geht. Ist auch nicht schwer.
Na, da bin ich mal gespannt. >>%TEMP% ;)
Also, so leid es mir tut... Aber das ist mehr als unnötig.Und meines Erachtens nach (wie oben bereits erwähnt) nicht funktionstüchtig...
> Ist das ein Problem?
Ja.
Und das - Naja, Wenn du dein Problem definieren könntest, was das mit relativen und absoluten Pfaden zu tun hat, werde ich mein Bestes geben,
dir zu helfen und produktive Antworten zu geben...
> Was hat denn das mit deinem "Problem" zu tun?
s.o.
Kein Kommentar

Und wenn noch wer richtige Tipps hat, bitte nur rein.
Richtige Frage = Richtiger Tipp :D

Und jetzt einmal im Ernst:
Bis jetzt habe ich nach all den Versuchen von Bastla und T-Mo noch keine schlüssige Frage / Problemstellung erkennen können.
Wenn du mir ganz einfach sagen könntest, was dein Problem ist, wo es hapert oder am Besten: Was du genau vor hast,
wird hier sicherlich jeder inklusive mirsein Bestes geben, dir zu helfen.

Gruß
Dominique
Member: Biber
Biber Jun 22, 2011 at 23:14:56 (UTC)
Goto Top
Moin Progfreund,

Zitat von @Progfreund:
Ich möchte die Umgebnungsvariable %TEMP% als Speicherort wählen und verarbeiten,
nur wird der Pfad abgekürzt nach der 8.3-Formel.
Das ist keine "Formel", sondern eine "Regel".
Die wird immer dann angewendet, wenn das Dateisystemobjekt(Datei, Pfad,..) sich nicht an Namenskonventionen hält, die z.B. auf USB-Sticks, Win95-Rechnern oder CDs noch üblich sind oder auch, ganz banal, wenn die darin enthaltenen Zeichen nicht im Standardzeichensatz eines jeden Windows-Users enthalten sind.

Beispiel:
>echo x>üöüäö.txt

>dir /x *.txt
...
23.06.2011  00:25                 3 33B9~1.TXT   üöüäö.txt
               1 Datei(en)              3 Bytes 
 
--> diese Datei wurde nicht mit einem short name versehen, weil der Name länger als 8 Zeichen ist, sondern wegén der Umlaute.
Und wie einfach zu erkennen ist, wurde einfach ein Hex-Timestamp als neuer Basis-8.3-Name genommen.
Hauptanliegen der Redmonder PraktikantInnen war ausschliesslich die Einhaltung der 8.3-"Regel".
Eine Formel zum Vor- und Zurückübersetzen war zu keinem Zeitpunkt vorgesehen und es gibt auch weltweit bislang nur einen Anwender, der danach gefragt hat.
:
Deshalb möchte ich relative Pfade in absolute Pfade umwandeln.
Wo wir gerade auf das Thema "Relativer und absoluter Schwachsinn" zu sprechen kommen....

Gibt es eine Regel für das Setzen von relativen bzw. absoluten Pfaden und die Rekonvertierung?
Ich sach' ma' so....
Ich habe hier eine Regel für die Konvertierung von Beiträgen...

cd %TEMP%
cd .\..
cd .\..
cd .\.. ::bringt nichts, weil der Username immer noch im 8:3 Format ist.
> 
Öhhmm - ja. ???? Damit willst du uns sagen...?? Oder.... nee... ?!? *kopfkratz* Hmmmm.
Das deutet zwar auf ein Problem hin, aber auf keines, das wir hier im Forum lösen können,

Die Abfrage nach den Umgebungsvariablen sollte dazu dienen, in Fällen, in denen ein
Speichern dort nicht möglich ist, eine andere Umgebungsvariable zu wählen.

Ich sach' ma' so...
Auf allen Windows-Rechnern gibt es ein %temp%-Verzeichnis, in dem jeder Schreibrechte hat, der irgendwie per Tastatur oder Maus den Eindruck erweckt, er wolle einen "Befehl" absetzen.
Die Seriösität von zwei kopulierenden Hummeln oder eine vom Baum auf die Tastatur fallende Sauerkirsche reicht dafür schon.
Warum also sollte Windows dann dir dieses Recht verwehren?

Aber einen Ort hier im Forum gibt es, in dem auch jeder unbegrenzte Schreibrechte hat:

back-to-top### Papierkorb ###


Und zwar deshalb, weil es mich wirklich stinkesauer macht, wenn du nach 5 Stunden mit geduldigen Nachfragen und Bitten mehrerer Hilfewilliger, denen es trotz ehrlichen Bemühens nicht gelungen ist, dein subjektiv empfundenes Problem irgendwie erkennbar zu machen (außer dir weiss auch jetzt noch niemand, was denn deine Frage oder dein Ziel war)...

Wenn du dann nach 5 Stunden, in denen nicht mal die Frage geklärt war, geschweige denn eine Lösung, dann den Beitrag auf "erledigt" setzt, deiner Wege gehst und alle anderen hier mit grossen Fragezeichen in den Augen zurücklässt.

Grüße
Biber