AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Robocopy und Unicodeverzeichnisse

Ein Thema von Garfield · begonnen am 21. Jul 2007 · letzter Beitrag vom 22. Jul 2007
Antwort Antwort
Benutzerbild von Garfield
Garfield

Registriert seit: 9. Jul 2004
Ort: Aken (Anhalt-Bitterfeld)
1.334 Beiträge
 
Delphi XE5 Professional
 
#1

Robocopy und Unicodeverzeichnisse

  Alt 21. Jul 2007, 13:12
Wie muss ein Robocopy Script gespeichert werden, damit RoboCopy die darin enthaltenen Verzeichnisnamen mit Unicodezeichen erkennt? Bzw wie muss RoboCopy bei Unicode aufgerufen werden?

Es soll ein Verzeichnis mit Robocopy kopiert werden, dessen Name Unicodezeichen enthält bzw enthalten kann. Für Unicode habe ich die TTNTControls verwendet. Enthalten Verzeichnisnamen Unicodezeichen, wird das Script nicht ausgeführt. Zur Kontrolle habe ich die Scripte mit SciTe als Unicode, Unicode Big Enidian und UTF-8 abgespeichert.

Wandle ich den WideString-Verzeichnisnamen über die untenstehende Funktion in Ansizeichen um, funktioniert es. Dies kann jedoch keine Lösung sein.

Delphi-Quellcode:
function WideToAnsi(const ws: WideString): String;
var
  i : Integer;
  j : Integer;
  tmp : String;
  Ebene : Array of WideString;
  SearchRec : TSearchRec;
  gefunden : Boolean;
begin
  j := 0;
  SetLength(Ebene, j + 1);
  Ebene[j] := '';

  for i := 1 to Length(ws) do
  if ws[i] <> '\'
  then
    Ebene[j] := Ebene[j] + ws[i]
  else begin
    inc(j);
    SetLength(Ebene, j + 1);
    Ebene[j] := '';
  end;

  Result := Ebene[0];

  for i := 1 to Length(Ebene) - 1
  do begin
    tmp := Ebene[i];
    if tmp = Ebene[i]
    then begin
      Result := Result + '\' + Ebene[i];
    end
    else begin
      gefunden := False;

      If findfirst(Result + '\*', faAnyFile, SearchRec) = 0
      then begin
        repeat
          if SearchRec.Name = tmp
          then begin
            Result := Result + '\' + Trim(SearchRec.FindData.cAlternateFileName);
            Gefunden := True;
          end;
        until (FindNext(SearchRec) <> 0) or gefunden;
      end;
      FindClose(SearchRec);
    end;
  end;
end;
Aus
Zitat:
L:\συγκρισιν
wird dann zum Beispiel
Zitat:
L:\EC4E~1
Die Commandline wird wie folgt aufgerufen:
Zitat:
RoboCopy /job:scriptname
Gruss Garfield
Ubuntu 22.04: Laz2.2.2/FPC3.2.2 - VirtBox6.1+W10: D7PE, DXE5Prof
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.106 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Robocopy und Unicodeverzeichnisse

  Alt 21. Jul 2007, 13:53
Moin Garfield,

hast Du Dir auch mal den Errorlevel angeschaut, den Robocopy zurückgibt?
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von Garfield
Garfield

Registriert seit: 9. Jul 2004
Ort: Aken (Anhalt-Bitterfeld)
1.334 Beiträge
 
Delphi XE5 Professional
 
#3

Re: Robocopy und Unicodeverzeichnisse

  Alt 21. Jul 2007, 14:48
Nein das hatte ich nicht.

Versuch per CMD:

Quellverzeichnis: L:\συγκρισιν (Das Wort stammt von einer griechischen Seite)
als Ansicode: L:\EC4E~1
Zielverzeichnis: G:\Test

Beide Verzeichnisse existieren.

Datei Unicode.rcj
Code:
::
:: Quellverzeichnis / Source Directory
::
      /SD:L:\&#963;&#965;&#947;&#954;&#961;&#953;&#963;&#953;&#957;

::
:: Zielverzeichnis / Destination Directory
::
      /DD:G:\Test

::
:: Kopieroptionen / Copy Options
::
      /S      :: Kopieren aller Unterverzeichnisse mit Ausnahme der leeren.
::     /COPYALL :: Alle Dateiinformationen kopieren, Adminrechte erforderlich

::
:: Wiederholungsoptionen / Retry Options
::
      /R:10 :: Anzahl der Wiederholungen / Numbers of Retrys

::
:: Logoptionen / Logging Options
::
      /V      :: Konsolenausgabe, übersprungene Dateien anzeigen.
      /TS     :: Zeitstempel der Quelldateien in der Ausgabe anzeigen.
      /FP     :: Vollen Pfad der Dateien angeben.

Datei robo.cmd
Code:
robocopy L:\RoboCopy\unicode.rcj
Beide Dateien sowie RoboCopy XP026 liegen im Verzeichnis "L:\RoboCopy\".

Der Aufruf der Robo.cmd ergibt folgendes:
Code:
L:\RoboCopy>robocopy /job:L:\RoboCopy\unicode.rcj

 Job File : L:\ROBOCOPY\UNICODE.RCJ

-------------------------------------------------------------------------------
   ROBOCOPY    ::    Robust File Copy for Windows    ::    Version XP026
-------------------------------------------------------------------------------

  Started : Sat Jul 21 15:53:11 2007

   Source : L:\RoboCopy\˜ç:\
     Dest - 

    Files : *.*
      
  Options : /JOB *.* /COPY:DAT /R:1000000 /W:30 

------------------------------------------------------------------------------

ERROR : No Destination Directory Specified.

       Simple Usage :: ROBOCOPY source destination /MIR

             source :: Source Directory (drive:\path or \\server\share\path).
        destination :: Destination Dir (drive:\path or \\server\share\path).
               /MIR :: Mirror a complete directory tree.

    For more usage information run ROBOCOPY /? or read Robocopy.Doc.

NOTE: Read "True Replication" in Robocopy.Doc prior to first use of /MIR !
****  /MIR can DELETE files as well as copy them !
Als Quellverzeichnis wird irgendwas verwendet und das Zielverzeichnis nicht eingetragen. Das fehlende Zielverzeichnis wird bemängelt.

Die Datei Ansicode.rcj ist bis auf den übersetzten Quellverzeichnisnamen mit der Unicode.rcj identisch. Ergebnis:
Code:
L:\RoboCopy>robocopy /job:L:\robocopy\Ansicode.rcj

 Job File : L:\ROBOCOPY\ANSICODE.RCJ

-------------------------------------------------------------------------------
   ROBOCOPY    ::    Robust File Copy for Windows    ::    Version XP026
-------------------------------------------------------------------------------

  Started : Sat Jul 21 15:42:11 2007

   Source : L:\EC4E~1\
     Dest : G:\Test\

    Files : *.*
      
  Options : /JOB *.* /V /TS /FP /S /COPY:DAT /R:10 /W:30 

------------------------------------------------------------------------------

                      1   L:\EC4E~1\
       New File         215589 2007/07/06 20:58:45   L:\EC4E~1\Dateiliste.rar
  0% 
 30% 
 60% 
 91% 
100% 
     New Dir         1   L:\EC4E~1\s?????s??\
       New File         215589 2007/07/06 20:58:45   L:\EC4E~1\s?????s??\Dateiliste.rar
  0% 
 30% 
 60% 
 91% 
100% 

------------------------------------------------------------------------------

                Total   Copied  Skipped Mismatch   FAILED   Extras
     Dirs :        8         7         1         0         0         0
    Files :       40        40         0         0         0         0
    Bytes :   5.34 m   5.34 m        0         0         0         0
    Times :  0:00:00   0:00:00                       0:00:00   0:00:00

    Speed :            6892410 Bytes/sec.
    Speed :            394.386 MegaBytes/min.

    Ended : Sat Jul 21 15:42:12 2007
Das Log habe ich gekürzt. Hier funktioniert es.
Gruss Garfield
Ubuntu 22.04: Laz2.2.2/FPC3.2.2 - VirtBox6.1+W10: D7PE, DXE5Prof
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.106 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Robocopy und Unicodeverzeichnisse

  Alt 21. Jul 2007, 14:55
Moin Garfield,

stehen die Pfade in ""?
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von Garfield
Garfield

Registriert seit: 9. Jul 2004
Ort: Aken (Anhalt-Bitterfeld)
1.334 Beiträge
 
Delphi XE5 Professional
 
#5

Re: Robocopy und Unicodeverzeichnisse

  Alt 21. Jul 2007, 15:23
Code:
::
:: Quellverzeichnis / Source Directory
::
      /SD:L:\&#963;&#965;&#947;&#954;&#961;&#953;&#963;&#953;&#957;

::
:: Zielverzeichnis / Destination Directory
::
      /DD:G:\Test
...
Da es bei Ansi ohne Hochkommata funktioniert hatte, sah ich keine Veranlassung dafür. Der Test mit Hochkommata bringt leider keine Änderung.

Die Verwendung des Schalters /Unicode bewirkt anscheinend nur, dass die Konsolenausgabe gesperrt angezeigt wird. Könnte es sein, dass es an der Konsole selbst liegt?
Gruss Garfield
Ubuntu 22.04: Laz2.2.2/FPC3.2.2 - VirtBox6.1+W10: D7PE, DXE5Prof
  Mit Zitat antworten Zitat
Benutzerbild von Garfield
Garfield

Registriert seit: 9. Jul 2004
Ort: Aken (Anhalt-Bitterfeld)
1.334 Beiträge
 
Delphi XE5 Professional
 
#6

Re: Robocopy und Unicodeverzeichnisse

  Alt 21. Jul 2007, 16:52
Dies ist leider auch nicht der Übeltäter. Ob CreateProcess oder CreateProcessW macht anscheinend keinen Unterschied. Trotz der Fehlermeldung ist der Errorcode = 0.
Gruss Garfield
Ubuntu 22.04: Laz2.2.2/FPC3.2.2 - VirtBox6.1+W10: D7PE, DXE5Prof
  Mit Zitat antworten Zitat
Benutzerbild von Garfield
Garfield

Registriert seit: 9. Jul 2004
Ort: Aken (Anhalt-Bitterfeld)
1.334 Beiträge
 
Delphi XE5 Professional
 
#7

Re: Robocopy und Unicodeverzeichnisse

  Alt 21. Jul 2007, 19:39
Mal ein paar Gedanken:
  • Mit dem Editor kann man Dateien in ANSI, Unicode, Unicode Big Endian und UTF-8 speichern, was nicht erfolgreich war.
  • Bei den TNTControls ist csAnsi, csUnicode, csUnicodeSwapped und csUtf8 angegeben. Wenn ich die gespeicherte Datei im Editor öffne, wird bei "Speichern unter" Unicode angegeben.
  • Windows soll UCS 2 und UTF-16 benutzen.
  • In der Unit System steht "UCS2Char = WideChar;"
  • In der Unit System gibt es eine "function WideStringToUCS4String(const S: WideString): UCS4String;" wobei " UCS4String = array of UCS4Char;" und " UCS4Char = type LongWord;" sind.
Kann man das überprüfen?
Gruss Garfield
Ubuntu 22.04: Laz2.2.2/FPC3.2.2 - VirtBox6.1+W10: D7PE, DXE5Prof
  Mit Zitat antworten Zitat
Benutzerbild von Garfield
Garfield

Registriert seit: 9. Jul 2004
Ort: Aken (Anhalt-Bitterfeld)
1.334 Beiträge
 
Delphi XE5 Professional
 
#8

Re: Robocopy und Unicodeverzeichnisse

  Alt 22. Jul 2007, 08:26
Wenn ich versuche eine Jobdatei, welche in Unicode kodiert ist, abzuarbeiten, wird anscheinend das aktuelle Verzeichnis und die ersten beiden Zeichen der Jobdatei als Quellverzeichnis verwendet. Nun habe ich einen ANSI-Job verwendet und ihn eine Unicodelogdatei anlegen lassen. Ich denke, dass eine Jobdatei mit derselben Kodierung wie das Log ausgeführt werden könnte.

Die Logdatei befindet sich im Anhang. Die Datei beginnt mit FF FE 0A 00.

Nach himitsu wäre die Datei UCS 2 Big Endian, nach turboPASCAL Unicode Low Endian. Nach BabelPad wäre es UTF-16 Little Endian mit Byte Order Mark.

Wenn ich die Datei mit BabelPad als UTF-8 speichere wird sie kleiner, bei UTF-16 größer. Unicode oder UCS 2 wird nicht unterstützt, sodass ich das nicht testen kann. Wobei das Unicode des Editors auch nicht das richtige war.
Angehängte Dateien
Dateityp: rar test_341.rar (619 Bytes, 8x aufgerufen)
Gruss Garfield
Ubuntu 22.04: Laz2.2.2/FPC3.2.2 - VirtBox6.1+W10: D7PE, DXE5Prof
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:59 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz