Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBScript Discussion :

VBS-BATCH symlink-creator ne fonctionne plus


Sujet :

VBScript

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    février 2016
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : février 2016
    Messages : 6
    Points : 9
    Points
    9
    Par défaut VBS-BATCH symlink-creator ne fonctionne plus
    Bonjour,
    J'ai depuis un certain temps maintenant un "symlink-creator" qui me sert énormément pour mes rangements.
    Hors, je soupçonne que depuis que j'ai effectué la mise à jour W7x64 kb2819745 (powershell4) pour le bon fonctionnement d'un programme, mon script ne fonctionne plus.
    Est-ce un problème connu ?

    Contenu de la partie vbs du symlink-creator :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    Const ForReading = 1, ForWriting = 2, ForAppending = 8, CreateIfNeeded = true
    set fso = CreateObject("Scripting.FileSystemObject")
    set file = fso.OpenTextFile("symlink-creator_source.txt", ForWriting, CreateIfNeeded)
     
    dim fname 
    sourcepath = inputbox("Full source path (inside empty folder) :")
    If IsEmpty(sourcepath) Then
    	WScript.Quit 1
    End If
    myscript = sourcepath
    file.write myscript
    file.close
     
    set file = fso.OpenTextFile("symlink-creator_target.txt", ForWriting, CreateIfNeeded)
    targetpath = inputbox("Full target path (the place of the actual folder) :")
    If IsEmpty(sourcepath) Then
    	WScript.Quit 1
    End If
    myscript = targetpath
    file.write myscript
    file.close
     
    CreateObject("WScript.Shell").Run "2.Symlink-creator.bat", 2
     
    WScript.Quit 1
    Et voici le contenu du batch qui désormais loop sur la demande de privilège admin :
    Code batch : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
     
    @echo off
    :: BatchGotAdmin
    :-------------------------------------
    REM  --> Check for permissions
        IF "%PROCESSOR_ARCHITECTURE%" EQU "amd64" (
    >nul 2>&1 "%SYSTEMROOT%\SysWOW64\cacls.exe" "%SYSTEMROOT%\SysWOW64\config\system"
    ) ELSE (
    >nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"
    )
     
    REM --> If error flag set, we do not have admin.
    if '%errorlevel%' NEQ '0' (
        echo Requesting administrative privileges...
        goto UACPrompt
    ) else ( goto gotAdmin )
     
    :UACPrompt
        echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
        set params = %*:"=""
        echo UAC.ShellExecute "cmd.exe", "/c ""%~s0"" %params%", "", "runas", 1 >> "%temp%\getadmin.vbs"
     
        "%temp%\getadmin.vbs"
        del "%temp%\getadmin.vbs"
        exit /B
     
    :gotAdmin
        pushd "%CD%"
        CD /D "%~dp0"
    :--------------------------------------
     
    @Echo off
    set /p fullsourcepath=<symlink-creator_source.txt
    set /p fulltargetpath=<symlink-creator_target.txt
    ::IF NOT DEFINED %fullsourcepath% GOTO :EOF
    ::IF NOT DEFINED %fulltargetpath% GOTO :EOF
     
    for %%f in ("%fullsourcepath%") do set sourcefolder=%%~nxf
    for /D %%D in ("%fullsourcepath%") do  set sourcepath=%%~dpD
    for %%f in ("%fulltargetpath%") do set targetfolder=%%~nxf
    for /D %%D in ("%fulltargetpath%") do  set targetpath=%%~dpD
     
    :CHECKTARGETFOLDER
    IF EXIST "%targetpath%%targetfolder%" GOTO CHECKSOURCEFOLDER
    MD "%targetpath%%targetfolder%"
    IF %errorlevel% neq 0 GOTO ERRORCHECKTARGETFOLDER
     
    :CHECKSOURCEFOLDER
    IF EXIST "%sourcepath%%sourcefolder%" GOTO MOVESOURCEFOLDER
    IF %errorlevel% neq 0 GOTO ERRORCHECKSOURCEFOLDER
     
    :MOVESOURCEFOLDER
    robocopy "%sourcepath%%sourcefolder%" "%targetpath%%targetfolder%" /E /XO
    IF %errorlevel% equ 8 GOTO ERRORMOVESOURCEFOLDER
    IF %errorlevel% equ 16 GOTO ERRORMOVESOURCEFOLDER
    RENAME "%sourcepath%%sourcefolder%" "%sourcefolder%_tmp"
    IF %errorlevel% neq 0 GOTO ERRORRENAMESOURCEFOLDER
    rmdir /s /q "%sourcepath%%sourcefolder%_tmp"
    ::timeout /t 2 /nobreak
     
    :MKLINK
    mklink /D "%sourcepath%%sourcefolder%" "%targetpath%%targetfolder%"
    IF %errorlevel% neq 0 GOTO ERRORMKLINK
    echo "<<<---|  SYMLINK CREATED SUCCESFULLY  |--->>>" 
    echo " "
    echo "%targetfolder% Symlink is located in : %sourcepath%"
    echo "and redirects to : %targetpath%%targetfolder%"
    echo " "
    timeout /t 10
    GOTO :EOF
     
    :ERRORCHECKTARGETFOLDER
    echo "There was a problem with Target path/folder, aborting..."
    timeout /t -1
    GOTO :EOF
     
    :ERRORCHECKSOURCEFOLDER
    echo "There was a problem with Source path/folder, aborting..."
    timeout /t -1
    GOTO :EOF
     
    :ERRORRENAMESOURCEFOLDER
    echo "Couldn't access Source folder, please check if folder is in use, aborting..."
    timeout /t -1
    GOTO :EOF
     
    :ERRORMOVESOURCEFOLDER
    echo "Couldn't access Source/Target folder, please check if folders are in use, aborting..."
    timeout /t -1
    GOTO :EOF
     
    :ERRORMKLINK
    echo  "There was a problem while creating symlink, aborting..."
    timeout /t -1
    GOTO :EOF
     
    :EOF

    Je remarque au passage que le dossier "%SYSTEMROOT%\SysWOW64\config\system" n'existe pas... aucune idée si c’était le cas avant
    Attention de ne pas exécuter ces codes si vous avez des travaux non sauvegardés, la boucle empêche d'utiliser le système et le seul moyen que j'ai trouvé d'en sortir est de rouvrir une session.
    Merci d'avance pour votre aide.

  2. #2
    Rédacteur/Modérateur
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    décembre 2004
    Messages
    4 957
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : décembre 2004
    Messages : 4 957
    Points : 11 404
    Points
    11 404
    Par défaut
    Salut

    A voir la colorisation de ton code batch, il doit y avoir un problème a partir de la ligne 19, mais je ne suis pas spécialement compétant en codage BATCH.
    ProgElecT
    Soyez sympa, pensez -y
    Balises[CODE]...[/CODE]
    Balises[CODE=NomDuLangage]...[/CODE] quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Le bouton en fin de discussion, quand vous avez obtenu l'aide attendue.
    ......... et pourquoi pas, pour remercier, un pour celui/ceux qui vous ont dépannés.

  3. #3
    Expert éminent
    Avatar de hackoofr
    Homme Profil pro
    Enseignant
    Inscrit en
    juin 2009
    Messages
    3 624
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : juin 2009
    Messages : 3 624
    Points : 8 699
    Points
    8 699
    Par défaut

    Vous pouvez tester ce batch :
    Code BAT : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    @echo off
    REM  --> Check for permissions
    Reg query "HKU\S-1-5-19\Environment" >nul 2>&1
    REM --> If error flag set, we do not have admin.
    if '%errorlevel%' NEQ '0' (
    Echo.
    ECHO                        **************************************
    ECHO                 Running Admin shell... Please wait...
    ECHO                        **************************************
     
        goto UACPrompt
    ) else ( goto gotAdmin )
     
    :UACPrompt
        echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
        set params = %*:"=""
       echo UAC.ShellExecute "cmd.exe", "/c ""%~s0"" %params%", "", "runas", 1 >> "%temp%\getadmin.vbs"
     
       "%temp%\getadmin.vbs"
       del "%temp%\getadmin.vbs"
       exit /B
     
    :gotAdmin
    pushd "%CD%"
    CD /D "%~dp0"
     
    set /p fullsourcepath=<symlink-creator_source.txt
    set /p fulltargetpath=<symlink-creator_target.txt
    ::IF NOT DEFINED %fullsourcepath% GOTO :EOF
    ::IF NOT DEFINED %fulltargetpath% GOTO :EOF
     
    for %%f in ("%fullsourcepath%") do set sourcefolder=%%~nxf
    for /D %%D in ("%fullsourcepath%") do  set sourcepath=%%~dpD
    for %%f in ("%fulltargetpath%") do set targetfolder=%%~nxf
    for /D %%D in ("%fulltargetpath%") do  set targetpath=%%~dpD
     
    :CHECKTARGETFOLDER
    IF EXIST "%targetpath%%targetfolder%" GOTO CHECKSOURCEFOLDER
    MD "%targetpath%%targetfolder%"
    IF %errorlevel% neq 0 GOTO ERRORCHECKTARGETFOLDER
     
    :CHECKSOURCEFOLDER
    IF EXIST "%sourcepath%%sourcefolder%" GOTO MOVESOURCEFOLDER
    IF %errorlevel% neq 0 GOTO ERRORCHECKSOURCEFOLDER
     
    :MOVESOURCEFOLDER
    robocopy "%sourcepath%%sourcefolder%" "%targetpath%%targetfolder%" /E /XO
    IF %errorlevel% equ 8 GOTO ERRORMOVESOURCEFOLDER
    IF %errorlevel% equ 16 GOTO ERRORMOVESOURCEFOLDER
    RENAME "%sourcepath%%sourcefolder%" "%sourcefolder%_tmp"
    IF %errorlevel% neq 0 GOTO ERRORRENAMESOURCEFOLDER
    rmdir /s /q "%sourcepath%%sourcefolder%_tmp"
    ::timeout /t 2 /nobreak
     
    :MKLINK
    mklink /D "%sourcepath%%sourcefolder%" "%targetpath%%targetfolder%"
    IF %errorlevel% neq 0 GOTO ERRORMKLINK
    echo "<<<---|  SYMLINK CREATED SUCCESFULLY  |--->>>" 
    echo " "
    echo "%targetfolder% Symlink is located in : %sourcepath%"
    echo "and redirects to : %targetpath%%targetfolder%"
    echo " "
    timeout /t 10
    GOTO :EOF
     
    :ERRORCHECKTARGETFOLDER
    echo "There was a problem with Target path/folder, aborting..."
    timeout /t -1
    GOTO :EOF
     
    :ERRORCHECKSOURCEFOLDER
    echo "There was a problem with Source path/folder, aborting..."
    timeout /t -1
    GOTO :EOF
     
    :ERRORRENAMESOURCEFOLDER
    echo "Couldn't access Source folder, please check if folder is in use, aborting..."
    timeout /t -1
    GOTO :EOF
     
    :ERRORMOVESOURCEFOLDER
    echo "Couldn't access Source/Target folder, please check if folders are in use, aborting..."
    timeout /t -1
    GOTO :EOF
     
    :ERRORMKLINK
    echo  "There was a problem while creating symlink, aborting..."
    timeout /t -1
    GOTO :EOF
     
    :EOF

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    février 2016
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : février 2016
    Messages : 6
    Points : 9
    Points
    9
    Par défaut
    Merci pour vos réponses, alors j'aurais peut-être dû préciser que le problème ne semble pas provenir du batch puisque :
    1 - lorsque j’exécute juste le batch en mettant manuellement les chemins dans les fichiers textes, il me créé mes symlinks sans souci.
    2 - je n'ai pas modifié le fichier batch depuis 2016.

    Je vais quand même investiguer davantage avec vos réponses et voir si j'arrive à quelque chose.

    Edit : Désolé @ProgElecT pour les balises avec les langages, je ne connaissais pas cette option

    Edit 2 : Bon, désolé d'avoir douté @hackoofr, avec votre batch ça refonctionne parfaitement. Auriez-vous une petite idée de ce qui coinçait ? En comparant je vois que vous testez les permissions avec [Reg query "HKU\S-1-5-19\Environment" >nul 2>&1] au lieu de passer par cacls.exe. Mais du coup, dans le fond, qu'est-ce qui a fait que le précédent batch qui a fonctionné brillement pendant 3 ans a cessé toute coopération il y a seulement quelques jours ? J'ai des centaines de batchs un peu partout, cela m’ennuierai qu'ils se mettent d'un coup à tous se rebeller. Et aussi merci beaucoup pour votre partage.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Compiler] windows 8 - fichier batch ne fonctionne plus
    Par martineaston dans le forum MATLAB
    Réponses: 6
    Dernier message: 25/02/2014, 17h31
  2. Code vbs ne fonctionnant plus
    Par Superpat9999 dans le forum VBScript
    Réponses: 6
    Dernier message: 26/11/2013, 14h53
  3. Réponses: 2
    Dernier message: 22/06/2005, 13h07
  4. mes requetes sous access ne fonctionnent plus
    Par trialrofr dans le forum ASP
    Réponses: 12
    Dernier message: 04/12/2004, 21h52
  5. [JSP][Tomcat]Changement de context -> JSP fonctionne plus
    Par mathieu dans le forum Servlets/JSP
    Réponses: 7
    Dernier message: 01/03/2004, 08h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo