6 Replies Latest reply on Mar 3, 2017 5:15 AM by oliverr

    if folder exist

    oliverr Apprentice
      Hallo,

      wie überprüft Ihr, ob ein Ordner existiert?
      Leider gibt es ja nur "Exist" womit man überprüfen kann ob einen  Datei vorhanden ist, aber ich bräuchte das, um zu prüfen ob ein Ordner existiert.
      Wie kann man das im eScript lösen?

      Grüße,
      Oliver
        • 1. Re: if folder exist
          derniwi Master
          Hallo Oliver,

          geht mit dem Prüfen, ob die Datei "." (Punkt) in dem Verzeichnis existiert.
          Also:
          If Exist(FOLDER\.")

          Gruß
          Nils
          • 2. Re: if folder exist
            Andreas.K Apprentice
            Moin Oliver,
            If Exist funktioniert (bei mir unter 2016.2) auch für Ordner.
            Script:
            If not Exist('%SystemDrive%\Temp')
              CreateFolder('%SystemDrive%\Temp',)/TS

            Log:
            11:59:22.757 1        Evaluating condition "not Exist('%SystemDrive%\Temp')"
            11:59:22.757 2        Condition FALSE  -> skipping IF part
            11:59:22.757 2        Skipping command : CreateFolder

            Gruß Andreas
            • 3. Re: if folder exist
              NicoS1 Master
              [QUOTE=A.K;50299]Moin Oliver,
              If Exist funktioniert (bei mir unter 2016.2) auch für Ordner.
              Script:
              If not Exist('%SystemDrive%\Temp')
                CreateFolder('%SystemDrive%\Temp',)/TS

              Log:
              11:59:22.757 1        Evaluating condition "CheckInstallMode(imUninstall)"
              11:59:22.757 2        Condition FALSE  -> skipping IF part
              11:59:22.757 2        Skipping command : goto

              Gruß Andreas

              Hallo Andreas,
              nimms mir nicht übel... aber in dem Beispiel passen Script und Logfile irgendwie gar nicht aufeinander. Im Script hast du einen If Not Exist, aber im Log with ein if CheckInstallMode(imUninstall) abgefragt
              Gruß
              • 4. Re: if folder exist
                Andreas.K Apprentice
                Ups, wie ist das denn passiert
                jetzt passt's, danke Nico
                • 5. Re: if folder exist
                  derniwi Master
                  Hallo zusammen,

                  ich habe das jetzt nochmal unter 2016.2.1 getestet. Dabei existiert "C:\Temp", während "C:\Temp2" nicht vorhanden ist.
                  If Exist('%SystemDrive%\Temp')
                  MsgBox
                    %SystemDrive%\Temp existiert.
                  EndProc
                  If not Exist('%SystemDrive%\Temp')
                  MsgBox
                    %SystemDrive%\Temp existiert nicht.
                  EndProc
                  !
                  If Exist('%SystemDrive%\Temp2')
                  MsgBox
                    %SystemDrive%\Temp2 existiert.
                  EndProc
                  If not Exist('%SystemDrive%\Temp2')
                  MsgBox
                    %SystemDrive%\Temp2 existiert nicht.
                  EndProc


                  Und alle vier Abfragen arbeiten richtig.
                  09:23:32.547 1        Evaluating condition "Exist('_SystemDrive_\Temp')"
                  09:23:32.547 2        Condition TRUE    -> entering IF part

                  09:23:32.548 2        ->  MsgBox  C:\Temp existiert.

                  09:23:35.620 1        Evaluating condition "not Exist('_SystemDrive_\Temp')"
                  09:23:35.621 2        Condition FALSE  -> skipping IF part
                  09:23:35.622 2        Skipping command : MsgBox

                  09:23:35.623 1        Evaluating condition "Exist('_SystemDrive_\Temp2')"
                  09:23:35.624 2        Condition FALSE  -> skipping IF part
                  09:23:35.625 2        Skipping command : MsgBox

                  09:23:35.626 1        Evaluating condition "not Exist('_SystemDrive_\Temp2')"
                  09:23:35.627 2        Condition TRUE    -> entering IF part

                  09:23:35.628 2        ->  MsgBox  C:\Temp2 existiert nicht.


                  Allerdings wird hier nicht unterschieden, ob es sich um ein Verzeichnis oder eine Datei handelt. Wenn es eine Datei "C:\Temp2" gibt (ohne Dateiendung, ist ja durchaus möglich), dann liefert die If-Abfrage ebenfalls "true" - dummerweise hilft unter Windows auch die Abfrage
                  If Exist('%SystemDrive%\Temp2\.')
                  MsgBox
                    %SystemDrive%\Temp2 existiert.
                  EndProc
                  If not Exist('%SystemDrive%\Temp2\.')
                  MsgBox
                    %SystemDrive%\Temp2 existiert nicht.
                  EndProc

                  nicht weiter, auch diese liefert True, egal, ob Temp2 eine Datei oder ein Verzeichnis ist.

                  Was man noch prüfen kann (über WMI waren meine Versuche nicht wirklich erfolgreich, da die Klasse Win32_Directory zu viele Instanzen besitzt), ist bei Existenz noch mit der cmd.exe abzufragen, ob das Objekt ein Verzeichnis ist:
                  Set('DirPath','%SystemDrive%\Temp')
                  If Exist('%DirPath%')
                  MsgBox
                    %DirPath% existiert.
                  EndProc
                  Set('returncode','0')
                  RunAsEx('%WINSYSDIR%\cmd.exe','/c dir /ad "%DirPath%"','','','2','returncode',raUseSisAccount+WaitForExecution+raHideWindow+UndoneContinueParentScript)/TW
                  If %returncode%='0'
                    MsgBox
                     %DirPath% ist ein Verzeichnis
                    EndProc
                  Else
                    MsgBox
                     %DirPath% ist eine Datei
                    EndProc
                  If not Exist('%DirPath%')
                  MsgBox
                    %DirPath% existiert nicht.
                  EndProc
                  !
                  Set('DirPath','%SystemDrive%\Temp2')
                  If Exist('%DirPath%')
                  MsgBox
                    %DirPath% existiert.
                  EndProc
                  Set('returncode','0')
                  RunAsEx('%WINSYSDIR%\cmd.exe','/c dir /ad "%DirPath%"','','','2','returncode',raUseSisAccount+WaitForExecution+raHideWindow+UndoneContinueParentScript)/TW
                  If %returncode%='0'
                    MsgBox
                     %DirPath% ist ein Verzeichnis
                    EndProc
                  Else
                    MsgBox
                     %DirPath% ist eine Datei
                    EndProc
                  If not Exist('%DirPath%')
                  MsgBox
                    %DirPath% existiert nicht.
                  EndProc


                  Gruß
                  Nils
                  • 6. Re: if folder exist
                    oliverr Apprentice
                    Hi,
                    es ist schade das DSM nicht zwischen Datei und Ordner unterscheidet, denn das selbe Problem hat DSM auch beim kopieren von Dateien. Habe nämlich mal eine Datei kopiert ohne auch den Zieldateinamen anzugeben, da hat das kopieren den Ordnernamen als Dateinamen genommen.
                    Hier wäre es schön wenn DSM da noch unterscheiden könnte und dann meinetwegen noch Befehle oder Parameter extra dazu kämen.

                    Grüße,
                    Oliver