Dateidatum einer Datei.ex1 auf Datei.ex2 übertragen

German support forum

Moderators: Hacker, Stefan2, white

Post Reply
User avatar
versalzen
Power Member
Power Member
Posts: 670
Joined: 2003-09-16, 11:52 UTC
Location: kölle, linksrheinisch.

Dateidatum einer Datei.ex1 auf Datei.ex2 übertragen

Post by *versalzen »

Hallo,

heute beschäftigt mich folgende Thematik:

Es befinden sich diverse Dateien in einem Verzeichnis.
Diese Dateien sind thematisch zusammengehörig, je nach Dateinamen, nur mit unterschiedlicher Extension. Kurz: identischer Dateiname, verschiedene Dateiendungen.

Also z.B.

Code: Select all

dateiname1.hauptdatei
dateiname1.thumbnail
dateiname1.beschreibung
dateiname1.musikstück
dateiname1.textdatei

dateiname2.hauptdatei
dateiname2.thumbnail
dateiname2.beschreibung

dateiname3.hauptdatei
dateiname3.musikstück
dateiname3.textdatei

dateiname4.hauptdatei
dateiname4.thumbnail
wobei .thumbnail, .beschreibung, .musikstück, .textdatei. natürlich für eine normale gleichbleibende Dateiendung steht und nicht immer alle diversen zugehörigen Dateien für eine Hauptdatei existieren müssen. (Manchmal gibt es nur eine Hauptdatei, aber keine dazugehörigen, andere Male haben Hauptdateien 2-5 zugehörige Dateien.) Die Hauptdatei allerdings, kann unterschiedliche Extensions haben. Allerdings keine, die identisch mit den Zusammengehörigen wäre.

Was will ich?

Alle "Hauptdateien" (dateiname1.hauptdatei) haben ein Datum, das ich verwenden möchte, um es auf alle anderen Dateien (dateiname1.thumbnail, dateiname1.beschreibung, dateiname1.musikstück, ...) derselben Hauptdatei zu übertragen.

Bedeutet,
dateiname1.hauptdatei mit Datum 2003.02.01 "vererbt" sein Datum an alle dateiname1.* Dateien
dateiname2.hauptdatei mit Datum 2004.05.06 "vererbt" sein Datum an alle dateiname2.* Dateien, usw.

Natürlich im Batch, da es sich um unendlich viele Dateien handelt :-) Is ja klar...

Wird es mir wohl möglich sein, das mit dem TC (und eventuellen Hilfsmitteln) hinzubekommen?

Alle Anregungen/Ideen/Vorschläge kommen in eine große Dose, die ich dann hier auf den Tisch stelle, direkt neben der Tastatur und der Maus, um alles umzusetzen und hoffentlich zum gewünschten Ergebnis zu kommen...
Was nützt der Löffel für die Weisheit, wenn man zu weit vom Suppentopf entfernt sitzt?

Mario
User avatar
HolgerK
Power Member
Power Member
Posts: 5411
Joined: 2006-01-26, 22:15 UTC
Location: Europe, Aachen

Post by *HolgerK »

Ein Möglichkeit wäre alle Hauptdateien zu markieren (z.B. über <Alt+Plus> alle mit gleicher Erweiterung).
Die so entstanden Liste an eine Batch übergeben der für jeden Eintrag dann NirCmd mit dem Befehl clonefiletime aufruft:
NirCmd help wrote:clonefiletime [source filename] [Wildcard]

Clone the Created/Modified/Accessed time of one file into one or more files. The Created/Modified/Accessed time is taken from the file specified in [source filename] parameter and set into the file or wildcard specified in [Wildcard] parameter.
Examples:
clonefiletime "c:\temp\file1.txt" "c:\files\*.txt"
clonefiletime "c:\temp\file1.txt" "c:\temp\file2.txt"
Der Batch müsste dazu zusätzlich den DateiPfad ohne Extension aufsplitten, so dass man ihn als "DateiPfad.*" an nircmd übergeben kann.

Wenn es endlich viele Dateien sind, könnte man auch für jede Hauptdatei einen einfach zu erstellenden Button betätigen der clonefiletime per Wildcard auf die Nebendateien direkt aufruft.
Kommt auf die Grösse von unendlich an welcher Weg aufwändiger ist. :wink:

Gruß
Holger
User avatar
versalzen
Power Member
Power Member
Posts: 670
Joined: 2003-09-16, 11:52 UTC
Location: kölle, linksrheinisch.

Post by *versalzen »

Hey HolgerK, danke f.d. Ideen.
HolgerK wrote:Ein Möglichkeit wäre alle Hauptdateien zu markieren (z.B. über <Alt+Plus> alle mit gleicher Erweiterung).
Ok, das kann ich.
HolgerK wrote:Die so entstanden Liste an eine Batch übergeben der für jeden Eintrag dann NirCmd mit dem Befehl clonefiletime aufruft:
Auch das kann ich. (Eigentlich hat man ja schon alles auf der Platte liegen....nur müsste man sich daran erinnern...)
HolgerK wrote:Der Batch müsste dazu zusätzlich den DateiPfad ohne Extension aufsplitten, so dass man ihn als "DateiPfad.*" an nircmd übergeben kann.
Das wird schon komplizierter, wenn TC nicht diese Möglichkeit für mich bereitstellt. Ich kann zwar diverse Programmiersprachen lesen, aber eben nur lesen. Aber ich schaue mal im Internet um die Ecke nach, was es dazu gibt.

EDIT: Ok, habe hier eine kleine Hilfestellung gefunden. Das Ausprobieren in der Shell sieht aber nicht so rosig, wie erwartet aus.

Code: Select all

c:\Boot\cs-CZ>@for %i in (*.*) do @echo %~xi
.mui
c:\Boot\cs-CZ>
Das gibt schonmal wunderbar die Extension aus.

Code: Select all

c:\Boot\cs-CZ>@for %i in (*.*) do @echo %~ni
bootmgr.exe
c:\Boot\cs-CZ>
Hier hätte ich erwartet, das nur der Dateiname angezeigt wird. Aber -irgendwie- findet hier kein Split statt. Wenns hier schon so blöde läuft, wie wirds dann wohl erst mit Dateinamen werden, die dutzende Sonderzeichen beinhalten? hmmmm... bin weiter dran.. :-)

HolgerK wrote:Wenn es endlich viele Dateien sind, könnte man auch für jede Hauptdatei einen einfach zu erstellenden Button betätigen der clonefiletime per Wildcard auf die Nebendateien direkt aufruft.
Also das wird öfter vorkommen, also wäre ein Button in der Tat eine gute Idee. Da es natürlich sehr aufwendig ist, zu prüfen, welche Hauptdateien und Nebendateien schon datumsmässig zusammenpassen, werde ich wohl immer wieder von vorne beginnen, auch, wenn nur 10 Dateien neu hinzugekommen sind.

Allerdings ich verstehe nicht recht, das du hiermit meinst:
HolgerK wrote:Kommt auf die Grösse von unendlich an welcher Weg aufwändiger ist.
Was nützt der Löffel für die Weisheit, wenn man zu weit vom Suppentopf entfernt sitzt?

Mario
User avatar
HolgerK
Power Member
Power Member
Posts: 5411
Joined: 2006-01-26, 22:15 UTC
Location: Europe, Aachen

Post by *HolgerK »

versalzen wrote:
HolgerK wrote:Wenn es endlich viele Dateien sind, könnte man auch für jede Hauptdatei einen einfach zu erstellenden Button betätigen der clonefiletime per Wildcard auf die Nebendateien direkt aufruft.
Also das wird öfter vorkommen, also wäre ein Button in der Tat eine gute Idee. Da es natürlich sehr aufwendig ist, zu prüfen, welche Hauptdateien und Nebendateien schon datumsmässig zusammenpassen, werde ich wohl immer wieder von vorne beginnen, auch, wenn nur 10 Dateien neu hinzugekommen sind.
Das wäre ein Button den man benutzen kann um ein einzelne Dateigruppe mit dem Datum des Files unter dem Cursor zu versehen:

Code: Select all

TOTALCMD#BAR#DATA
C:\Tools\SYS\NirLauncher\NirSoft\nircmd.exe
clonefiletime "%P%N" "%P%O.*"
%COMMANDER_PATH%\TOTALCMD.exe,3
nircmd clonefiletime to files with same name but different extension
C:\Tools\SYS\NirLauncher\NirSoft\

-1
Einfach nicht wahr?
Pro Dateigruppe einmal drücken.
Allerdings ich verstehe nicht recht, das du hiermit meinst:
HolgerK wrote:Kommt auf die Grösse von unendlich an welcher Weg aufwändiger ist.
Nun das wäre ein Batch (den man anstelle des obigen N mal Buttondrücken) nach M mal Hauptdatei(en) einer Dateigruppen markieren, aufrufen kann und dann alles in einen Rutsch ausführen lässt.

Der Aufwand um einen solchen Batch zu erstellen sei X (geteilt durch die Erfahrung mit Dos-Command-Batch-Programmierung, multipliziert mit eventuellen Unicode Problemen + Testaufwand)

Wenn also N -> unendlich (weil M seeehr klein und die Anzahl der Dateigruppen gigantisch), dann lohnt sich evtl. der Aufwand X.

Ansonsten nicht.

Über N und M kann ich nur Vermutungen ansetzten, da deine Angabe unendlich in keinem Fall der Realität entspricht.

Mein Erfahrung in DOS-Command Batches ist eher gering, und die Befürchtung eine weitere unleserliche For Schleife zu programmieren eher groß (was X in meinen Augen wiederum anwachsen lässt).
Ich weiss dass es möglich ist, aber den Testaufwand will ich mir momentan ersparen.

Gruß
Holger
User avatar
HolgerK
Power Member
Power Member
Posts: 5411
Joined: 2006-01-26, 22:15 UTC
Location: Europe, Aachen

Post by *HolgerK »

EDIT: Ok, habe hier eine kleine Hilfestellung gefunden. Das Ausprobieren in der Shell sieht aber nicht so rosig, wie erwartet aus.
Versuch es mal mit einem Button, der mit Parameter %L den folgenden Batch aufruft:

Code: Select all

FOR /F "tokens=*" %%i in (%1) do echo clonefiletime "%%i" "%%~dpni.*"
pause
Nach Überprüfung der Ergebnisausgabe kannst du echo durch nircmd.exe ersetzen.
Ob das allerdings problemlos mit Unicode oder Umlauten zusammenspielt, habe ich nicht getestet.

Gruß
Holger
User avatar
Dalai
Power Member
Power Member
Posts: 9989
Joined: 2005-01-28, 22:17 UTC
Location: Meiningen (Südthüringen)

Post by *Dalai »

versalzen wrote:

Code: Select all

c:\Boot\cs-CZ>@for %i in (*.*) do @echo %~ni
bootmgr.exe
c:\Boot\cs-CZ>
Hier hätte ich erwartet, das nur der Dateiname angezeigt wird.
Tut er doch, denn .mui ist die Extension und bootmgr.exe ist der Dateiname, weil das Ding komplett bootmgr.exe.mui heißt. Der TC zeigt das übrigens genauso an: bootmgr.exe ist der Dateiname und mui die Erweiterung. Extension heißt: alles bis zum letzten Punkt ist der Dateiname, der Rest ist Extension. Gibt es keinen Punkt, gibt es keine Extension.
Wenns hier schon so blöde läuft, wie wirds dann wohl erst mit Dateinamen werden, die dutzende Sonderzeichen beinhalten?
Sonderzeichen sind nicht das Problem, der Punkt ist es. Wenn deine Dateinamen in jedem Fall eine reguläre Extension haben (pdf, doc, txt, mp3 oder sonstwas), brauchst du dir darüber keine Gedanken zu machen. Sind Dateien darunter, die keine Extension haben - die du als solche deuten würdest - aber dafür einen Punkt und danach noch Zeichen, wird's problematisch.

MfG Dalai
#101164 Personal licence
Ryzen 5 2600, 16 GiB RAM, ASUS Prime X370-A, Win7 x64

Plugins: Services2, Startups, CertificateInfo, SignatureInfo, LineBreakInfo - Download-Mirror
User avatar
versalzen
Power Member
Power Member
Posts: 670
Joined: 2003-09-16, 11:52 UTC
Location: kölle, linksrheinisch.

Post by *versalzen »

Dalai wrote:Tut er doch
Stimmt, ich hatte übersehen, das die Extension gekürzt wurde, da ich in der falschen Annahme war, die Datei hiesse bootmgr.exe und nicht bootmgr.exe.mui. Dank Dir!
HolgerK wrote:Versuch es mal mit einem Button, der mit Parameter %L den folgenden Batch aufruft:

Code: Select all

FOR /F "tokens=*" %%i in (%1) do echo clonefiletime "%%i" "%%~dpni.*"
pause
Nach Überprüfung der Ergebnisausgabe kannst du echo durch nircmd.exe ersetzen.
Ob das allerdings problemlos mit Unicode oder Umlauten zusammenspielt, habe ich nicht getestet.
Leider nein, tut es nicht. Sobald sich z.B. ein Ü im Pfadnamen befindet, klappts schon nicht mehr.

Meine eigenen Versuche in den letzten Stündchen sind leider auch immer wieder an den Umlauten oder anderen Sonderzeichen gescheitert....Im Prinzip ist es ja gar nicht mal so schwer, wenn man sich Code "ausleihen" kann. :-]

@Welt:
Weis jemand, *aus welchem Grund* es nicht geht?
Also ich meine, wieso Windows (hier W7) oder DOS (ist es überhaupt Windows oder DOS?) ewig Probleme mit Umlauten hat, obwohl ich mich doch auf derselben Plattform befinde, wenn ich eine Batch schreibe, die auf das Dateisystem zugreift auf der Umlaute problemlos dargestellt werden, aber sobald ich in die Komandozeile wechsle, heult Windows (und ich auch!)
HolgerK wrote:... da deine Angabe unendlich in keinem Fall der Realität entspricht.
HolgerK wrote:Das wäre ein Button den man benutzen kann um ein einzelne Dateigruppe mit dem Datum des Files unter dem Cursor zu versehen
Ok, dank Deiner verständlichen, weil praktisch umsetzbaren Formel, habe ich nun den Unterschied verstanden :-) Obwohl die Unendlichkeit dadurch zustande kommt, das man einfach aufhört weiterzumachen, so wie ich es getan habe, aber das ist ein anderes Thema :-)
Aber es ist, wie Du meintest: Der Testaufwand ist einfach enorm.

Vielen Dank auf jeden Fall ersteinmal. Habe nun auch gelernt, das man Buttons einfach Kopieren und einsetzen kann. Das war mir vorher auch nicht geläufig.
Was nützt der Löffel für die Weisheit, wenn man zu weit vom Suppentopf entfernt sitzt?

Mario
User avatar
Dalai
Power Member
Power Member
Posts: 9989
Joined: 2005-01-28, 22:17 UTC
Location: Meiningen (Südthüringen)

Post by *Dalai »

versalzen wrote:@Welt:
Weis jemand, *aus welchem Grund* es nicht geht?
Ja, weil MS zu blöd und/oder zu faul ist, die CMD so umzuschreiben, dass sie auch mit anderen Zeichensätzen als ASCII klarkommt, also ANSI oder gleich Unicode.
(ist es überhaupt Windows oder DOS?)
Weder noch. Die CMD ist eine DOS-Emulation auf einem Windows, und das noch nichtmal mit allen Features, aber dafür um andere Funktionen erweitert. Ist doch ganz einfach :lol:.
auf der Umlaute problemlos dargestellt werden
Das werden sie auch innerhalb der CMD. Das Problem beginnt dann, wenn man eine Liste von Datei-/Verzeichnisnamen aus irgendeinem Windows-Programm an die CMD übergibt. Alle Windows-Programme arbeiten mindestens mit ANSI, solange sie nicht noch aus der Steinzeit stammen, und heutzutage sogar meist schon mit Unicode. Die CMD kann aber wie gesagt (ohne zusätzliche Eingriffe oder besser gesagt Würgarounds) nur mit ASCII etwas anfangen.

Als Lösung gibt es zwei Möglichkeiten:
  • Dateiliste als ASCII speichern - das dürfte wohl die dümmste Lösung sein, weil man spätestens auf einem System mit Unicode-Dateinamen (z.B. Chinesisch, Koreanisch, Japanisch) in ungeahnte Probleme vordringt (wo noch nie ein Mensch zuvor gewesen ist ;))
  • Batch schreiben, die die Liste verarbeitet und den Zeichensatz vorher wechselt. Das kann z.B. so aussehen:

    Code: Select all

    set skip=4
    REM --- die reg.exe auf Windows 7 gibt weniger Zeilen aus als die von XP
    reg.exe /? | findstr "Version 3.0" > NUL || set skip=2
    
    :GET_CODEPAGE
    for /f "skip=%skip% tokens=3" %%i in (
      'reg.exe query "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\CodePage" /v "ACP"'
    ) do (
      set active_cp=%%i
    )
    
    for /f "skip=%skip% tokens=3" %%i in (
      'reg.exe query "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\CodePage" /v "OEMCP"'
    ) do (
      set oem_cp=%%i
    )
    
    :DO
    REM --- if-Befehl: Würgaround für Windows XP64, wo es in der 32 bit CMD kein chcp mehr gibt
    if "[%ProgramFiles(x86)%]" == "[]" chcp %active_cp% > NUL
    
    REM  *** Hier die eigentliche Arbeit des Skripts
    
    REM --- if-Befehl: Würgaround für Windows XP64, wo es in der 32 bit CMD kein chcp mehr gibt
    if "[%ProgramFiles(x86)%]" == "[]" chcp %oem_cp% > NUL
    
    wobei der letzte Abschnitt nur notwendig ist, wenn man noch etwas nacharbeiten/ausgeben muss. Hinweis: falls du Win7 x64 verwendest, dann nimm die if-Bedingungen vor den chcp-Anweisungen raus.
MfG Dalai
#101164 Personal licence
Ryzen 5 2600, 16 GiB RAM, ASUS Prime X370-A, Win7 x64

Plugins: Services2, Startups, CertificateInfo, SignatureInfo, LineBreakInfo - Download-Mirror
User avatar
HolgerK
Power Member
Power Member
Posts: 5411
Joined: 2006-01-26, 22:15 UTC
Location: Europe, Aachen

Post by *HolgerK »

Dalai wrote:Ja, weil MS zu blöd und/oder zu faul ist, die CMD so umzuschreiben, dass sie auch mit anderen Zeichensätzen als ASCII klarkommt, also ANSI oder gleich Unicode.
Nun, es gibt ja einen Nachfolger: MS PowerShell.
Leider (oder soll ich sagen "Gott sei Dank") nicht syntaxkompatibel zum Kommadointerpreter(CMD.exe), aber durchaus fähig besser lesbare Scripte mit Unicodeunterstützung(PowerShell ISE) auszuführen.

Hat sich allerdings noch nicht so sonderlich weit verbreitet:
http://www.googlebattle.com/?domain=powershell&domain2=batch&submit=Go!
http://www.googlebattle.com/?domain=powershell&domain2=vbscript&submit=Go!

Ich selber nehme mir seit Jahren vor mich mal darin tiefer einzuarbeiten, aber ich greife dann doch lieber wieder zu Altbewährtem wie Vbs oder Cmd, weil es für einfache Aufgaben schneller zu benutzen ist und überall verfügbar ist.
In dem Fall bin ich eben als Anwender zu faul.

Gruß
Holger
User avatar
versalzen
Power Member
Power Member
Posts: 670
Joined: 2003-09-16, 11:52 UTC
Location: kölle, linksrheinisch.

Post by *versalzen »

(W7, 32Bit)
Wow, da wäre ich ja nun beim besten Willen nie drauf gestoßen...

Danke Dalai, ich habe das mal angetestet und mein (bzw. das von HolgerK vorgeschlagene und mit meinem Gewurstel verbundene) Coding eingesetzt, wo steht: "Hier die eigentliche Arbeit des Skripts".
Es funktioniert nun, soweit ich das prüfen und vergleichen konnte, eigentlich gut. Manche Dateinamen werden allerdings überhaupt nicht richtig dargestellt. Ich bekomme in der Shell nur ???????? anstelle der Buchstaben zu sehen. Allerdings wird hier unter Windows auch nur ||||||||||| angezeigt. Ich meine, früher war das mal Griechisch, oder so. Nun denn, diese ??????? oder |||||||||||| sind aber doch eher selten und müssen wohl, weil ich eh nicht erkennen kann, um was es sich handelt, händisch in lesbares umgewandelt werden...
Dalai wrote: wobei der letzte Abschnitt nur notwendig ist, wenn man noch etwas nacharbeiten/ausgeben muss.
Auf was genau beziehst Du Dich, wenn du letzten Abschnitt schreibst?



Desweiteren interessiert mich, was genau

Code: Select all

reg.exe /? | findstr "Version 3.0" > NUL || set skip=2
veranlasst. Ich vermute, es wird einer der beiden folgenden "reg.exe query" angesprungen, wenn "Version 3.0" nicht gefunden wird. Was bei mir der Fall ist:

Code: Select all

C:\temp>reg.exe /?

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 /?
  REG FLAGS /?
Woher weiss aber nun Dein Coding, welche Codepage er für die jeweiligen Dateien nehmen soll? Wie funktioniert die Entscheidung? (Und was könnte möglicherweise schief gehen?)

Dalai wrote:

Code: Select all

if "[%ProgramFiles(x86)%]" == "[]" chcp %oem_cp% > NUL
Kannst Du mir noch sagen, was passiert, wenn diese letzte Zeile nicht ausgeführt wird? Z.B. wenn ich die Batch vorher mit STRG+C abbreche?
Bleibt dann u.U. irgendetwas verschoben, was die Codepage angeht?
Ich habe bis dato noch nichts bemerkt, aber ich fürchte mich davor :-)


Bis dato bin ich Euch beiden sehr dankbar! Eure Hilfe hat mein Gefrickel doch schon erheblich abgekürzt.
Was nützt der Löffel für die Weisheit, wenn man zu weit vom Suppentopf entfernt sitzt?

Mario
User avatar
Dalai
Power Member
Power Member
Posts: 9989
Joined: 2005-01-28, 22:17 UTC
Location: Meiningen (Südthüringen)

Post by *Dalai »

versalzen wrote:Manche Dateinamen werden allerdings überhaupt nicht richtig dargestellt. Ich bekomme in der Shell nur ???????? anstelle der Buchstaben zu sehen. Allerdings wird hier unter Windows auch nur ||||||||||| angezeigt. Ich meine, früher war das mal Griechisch, oder so.
Dann sind das Unicode-Dateinamen. Die kann man wahrscheinlich in Verbindung mit der CMD vergessen. Solche Dateinamen sollte man - sofern möglich - umbenennen, um sie verarbeiten zu können.
Dalai wrote: wobei der letzte Abschnitt nur notwendig ist, wenn man noch etwas nacharbeiten/ausgeben muss.
Auf was genau beziehst Du Dich, wenn du letzten Abschnitt schreibst?
Der letzte Abschnitt ist das Zurücksetzen der Codepage mit

Code: Select all

if "[%ProgramFiles(x86)%]" == "[]" chcp %oem_cp% > NUL
Beispiel: Macht man nach der Bearbeitung noch eine pause ins Skript, bekommt man auf einem deutschen Windows keine ordentlichen Umlaute in der Meldung "Drücken Sie eine beliebige Taste". Hierfür mag das nicht weiter dramatisch sein, aber wenn es um die weitere Verarbeitung von Variablen oder sonstwas geht, kann es schon beachtenswert werden.

Desweiteren interessiert mich, was genau

Code: Select all

reg.exe /? | findstr "Version 3.0" > NUL || set skip=2
veranlasst.
Die Variable skip wird vorher im Skript auf den Wert 4 gesetzt. Dieses schwierig zu lesende Konstrukt sorgt dafür, dass die Variable skip nur dann auf 2 gesetzt wird, wenn in der Ausgabe von reg /? der String "Version 3.0" nicht enthalten ist. Hintergrund ist, dass reg.exe /? unter XP eben jenen Text mit ausgibt, und zwar nicht nur in der Hilfe (/?) sondern immer, also auch bei reg query & Co, und das sind (inkl. Leerzeile) eben 2 Zeilen mehr als unter Win7.
Ich vermute, es wird einer der beiden folgenden "reg.exe query" angesprungen, wenn "Version 3.0" nicht gefunden wird.
Nein, reg.exe query wird immer ausgeführt, nur die Variable skip hat auf XP einen anderen Wert als auf Win7 (und Vista vermutlich auch).
Woher weiss aber nun Dein Coding, welche Codepage er für die jeweiligen Dateien nehmen soll? Wie funktioniert die Entscheidung?
Ziemlich einfach: aus dem angegebenen Registry-Pfad. In der Registry selbst stehen schon die richtigen Codepages in Abhängigkeit von der Sprache (und ggf. Eingabegebietsschema). Irgendwann vor Jahren hatte ich nämlich auch Probleme mit Umlauten in Batch-Skripten und hatte solange gegoogled, bis ich eine Lösung fand - und die verwende und empfehle ich seitdem (inzwischen etwas angepasst und aufgebohrt).
(Und was könnte möglicherweise schief gehen?)
Ich hoffe nichts ;). Im Ernst: bei Unicode-Dateinamen, wie du sie wohl vorliegen hast, ist natürlich Ende, da bringt wohl ein Umschalten der Codepage nichts.

Dalai wrote:

Code: Select all

if "[%ProgramFiles(x86)%]" == "[]" chcp %oem_cp% > NUL
Kannst Du mir noch sagen, was passiert, wenn diese letzte Zeile nicht ausgeführt wird? Z.B. wenn ich die Batch vorher mit STRG+C abbreche?
Da sollte gar nichts weiter passieren.
Bleibt dann u.U. irgendetwas verschoben, was die Codepage angeht?
Die Codepage-Änderung gilt ausschließlich für diese eine CMD-Instanz. Alle anderen Programme und auch Windows selbst bleiben völlig unangetastet.

MfG Dalai
#101164 Personal licence
Ryzen 5 2600, 16 GiB RAM, ASUS Prime X370-A, Win7 x64

Plugins: Services2, Startups, CertificateInfo, SignatureInfo, LineBreakInfo - Download-Mirror
User avatar
versalzen
Power Member
Power Member
Posts: 670
Joined: 2003-09-16, 11:52 UTC
Location: kölle, linksrheinisch.

Post by *versalzen »

Wunderbar!
Nun habe ich -dünkt mir- alles notwendige Werkzeug und Wissen um mein Vorhaben weiter zu realisieren, bzw. zu verfeinern :-)

Seid bedankt, beide!
Was nützt der Löffel für die Weisheit, wenn man zu weit vom Suppentopf entfernt sitzt?

Mario
Post Reply