IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
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

Scripts/Batch Discussion :

The process cannot access the file because it is being used by another process. [Batch]


Sujet :

Scripts/Batch

  1. #1
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2014
    Messages
    744
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Juin 2014
    Messages : 744
    Points : 336
    Points
    336
    Par défaut The process cannot access the file because it is being used by another process.
    Bonjour.

    je n'arrive pas à debuguer ce court script :
    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
    @echo off
     
    set logs="logs_tests.txt"
    if exist %logs% (del %logs%)
     
    call :FONCTION_TIME  >> %logs%
    echo Debut du test - %JOUR%/%MOIS%/%ANNEE% %HEURE%:%MINUT% >> %logs%
     
     
    if "%1"=="" (goto ERROR_PARAM) else (set "civilite=%1")
     
    echo "A1" >> %logs%
     
    if "%civilite%"=="Bonjour" 
    	(echo "%civilite%" >> %logs%) 
    else 
    	(echo "Tu pourrais dire bonjour" >> %logs%)
     
    echo Fin du test - %JOUR%/%MOIS%/%ANNEE% %HEURE%:%MINUT% >> %logs%
     
    goto END
     
    :FONCTION_TIME
    rem Constitution de la date d execution
    rem  Il faut faire attention a la valeur de tokens (elle est a 1 pour win. serveur2003 et a 2 pour win 2000)
    for /f "tokens=1" %%i in ('date /t') do set DATEJ=%%i
    set DATEJ=%DATEJ:/=%
    set JOUR=%DATEJ:~0,2%
    set MOIS=%DATEJ:~2,2%
    set ANNEE=%DATEJ:~4,4%
    rem Constitution de l'heure et minute d execution
    for /f "tokens=1" %%i in ('time /t') do set TIMEJ=%%i
    set TIMEJ=%TIMEJ:/=%
    set HEURE=%TIMEJ:~0,2%
    set MINUT=%TIMEJ:~3,2%
     
    :ERROR_PARAM
    ECHO "Parametre attendu : ProduitLogicielVersion" >> %logs%
    goto END
     
    :END
    call :FONCTION_TIME
    echo Fin du packaging - %JOUR%/%MOIS%/%ANNEE% %HEURE%:%MINUT% >> %logs%
    rem on affiche le fichier de log dans la console
    exit /B 0

    La console m'affiche :
    The process cannot access the file because it is being used by another process.
    Et le fichier de log logs_tests.txt ne contient que :
    Terminate batch job (Y/N)?
    Pouvez vous m'aider SVP ?

  2. #2
    Membre éprouvé
    Homme Profil pro
    Développeur .NET en devenir
    Inscrit en
    Août 2017
    Messages
    546
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur .NET en devenir
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2017
    Messages : 546
    Points : 1 084
    Points
    1 084
    Par défaut
    Bonjour,

    J'ai l'impression que ta fonction :FONCTION_TIME tourne en boucle à cause du call dans le label :END

  3. #3
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2014
    Messages
    744
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Juin 2014
    Messages : 744
    Points : 336
    Points
    336
    Par défaut
    Bonjour barnabe.

    effectivement, il y a une fonction qui boucle.

    Comment l'arrêter sans la supprimer ?

    J'ai en plus un syntaxe incorrecte à ce niveau :

    Code batch : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if "%civilite%==Bonjour" 
    	(echo "%civilite%" >> %logs%) 
    else 
    	(echo "Tu pourrais dire bonjour" >> %logs%)

  4. #4
    Membre éprouvé
    Homme Profil pro
    Développeur .NET en devenir
    Inscrit en
    Août 2017
    Messages
    546
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur .NET en devenir
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2017
    Messages : 546
    Points : 1 084
    Points
    1 084
    Par défaut
    Essaie comme ça :
    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
    @echo off
    setlocal enabledelayedexpansion
     
    set logs="logs_tests.txt"
    if exist %logs% (del %logs%)
     
    call :FONCTION_TIME >> %logs%
    echo Debut du test - !JJMMAAAA! !HHMM! >> %logs%
     
    if "%~1"=="" (goto ERROR_PARAM) else (set "civilite=%~1")
     
    echo "A1" >> %logs%
     
    (if /i "!civilite!"=="Bonjour" (echo "!civilite!") else (echo "Tu pourrais dire bonjour")) >> %logs%
     
    echo Fin du test - !JJMMAAAA! !HHMM! >> %logs%
     
    goto END
     
    :ERROR_PARAM
    ECHO "Parametre attendu : ProduitLogicielVersion" >> %logs%
     
    :END
    call :FONCTION_TIME
    echo Fin du packaging - !JJMMAAAA! !HHMM! >> %logs%
    rem on affiche le fichier de log dans la console
    exit /B 0
     
    :FONCTION_TIME
     
    rem Constitution de la date d execution
    for /f "tokens=1-2" %%i in ('date /t') do if not "%%j"=="" (set "JJMMAAAA=%%j") else (set "JJMMAAAA=%%i")
     
    rem Constitution de l'heure et minute d execution
    for /f "tokens=1" %%i in ('time /t') do set "HHMM=%%i"
    set "HHMM=!HHMM:/=:!"
     
    GOTO :EOF

  5. #5
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2014
    Messages
    744
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Juin 2014
    Messages : 744
    Points : 336
    Points
    336
    Par défaut
    Tu m'épates.

    Tu peux me donner quelques explications sur ce qui marchait mal et pourquoi ça marche maintenant STP ?

  6. #6
    Membre éprouvé
    Homme Profil pro
    Développeur .NET en devenir
    Inscrit en
    Août 2017
    Messages
    546
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur .NET en devenir
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2017
    Messages : 546
    Points : 1 084
    Points
    1 084
    Par défaut
    Comme déjà dit, le gros point noir était la fonction qui se baladait en plein milieu du script, sans commande pour en sortir (goto :eof ou bien exit), avec une combinaison bizarre de call et goto qui formaient une boucle infinie.

    Une fois les legos remis dans l'ordre, j'ai fait quelques optimisations sans grande importance à part peut-être au niveau de la variable civilite et %1, connais-tu la différence entre %1 et %~1 ?

  7. #7
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2014
    Messages
    744
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Juin 2014
    Messages : 744
    Points : 336
    Points
    336
    Par défaut
    Citation Envoyé par barnabe0057 Voir le message
    Comme déjà dit, le gros point noir était la fonction qui se baladait en plein milieu du script, sans commande pour en sortir (goto :eof ou bien exit), avec une combinaison bizarre de call et goto qui formaient une boucle infinie.

    Une fois les legos remis dans l'ordre, j'ai fait quelques optimisations sans grande importance à part peut-être au niveau de la variable civilite et %1, connais-tu la différence entre %1 et %~1 ?
    Je vais voir pour les lego en comparant.

    pour la différence entre %1 et %~1, non, je ne connais pas la différence. %~1 enlève peut être des caractères comme "" ou des espaces avant ou après l'expression à évaluer ?

  8. #8
    Membre éprouvé
    Homme Profil pro
    Développeur .NET en devenir
    Inscrit en
    Août 2017
    Messages
    546
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur .NET en devenir
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2017
    Messages : 546
    Points : 1 084
    Points
    1 084
    Par défaut
    Exactement, %~1 enlève d'éventuelles double-quotes. Vu qu'on ne peut pas toujours savoir à l'avance si %1 en contiendra, pour rester maître du jeu il vaut mieux préférer %~1 ou "%~1" à %1, ça évite le scénario où l'on se retrouve avec 2 paires de double-quotes qui font planter le script.

  9. #9
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2014
    Messages
    744
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Juin 2014
    Messages : 744
    Points : 336
    Points
    336
    Par défaut
    Et bien merci et bonne fin de week-end.

  10. #10
    Membre éprouvé
    Homme Profil pro
    Développeur .NET en devenir
    Inscrit en
    Août 2017
    Messages
    546
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur .NET en devenir
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2017
    Messages : 546
    Points : 1 084
    Points
    1 084
    Par défaut
    Merci pareillement.

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 04/02/2016, 09h27
  2. Réponses: 0
    Dernier message: 31/03/2014, 13h09
  3. Réponses: 5
    Dernier message: 23/04/2013, 01h41
  4. The process cannot access the file.
    Par GoTrUnKo dans le forum ASP.NET
    Réponses: 4
    Dernier message: 28/01/2009, 17h06
  5. The process cannot access the file 'xyz' ..
    Par dsolheid dans le forum Général Dotnet
    Réponses: 4
    Dernier message: 21/04/2008, 11h45

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