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 :

Attribuer une variable à chaque ligne d'un fichier [Batch]


Sujet :

Scripts/Batch

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    240
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2008
    Messages : 240
    Par défaut Attribuer une variable à chaque ligne d'un fichier
    Bonjour

    Mes meilleurs voeux à tous et tous,

    ça fait un moment que je n'ai pas pratiqué vraiment le batch et il y a un truc qui m'échappe, je ne trouve pas quoi.

    Je voudrai attribuer une variable pour chaque élément trouvé dans mon fichier ini :

    Je pense que je n'utilise pas la bonne méthode.....

    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
    @echo off
    ::lire le fichier ini pour attribuer une variable à chaque ligne trouvé
    if exist moveconf.ini for /f "tokens=2 delims==" %%A in ('type moveconf.ini') do  SET DOSSCONF=%%A
    
    ::attribution de nouvelle variable
    set Word=%DOSSCONF%\Word
    set Excel=%DOSSCONF%\Excel
    set PowerPoint=%DOSSCONF%\Powerpoint
    set PDF=%DOSSCONF%\PDF
    set Archives=%DOSSCONF%\Mes Archives
    set vrprogrmes=%DOSSCONF%\Mes programmes
    set Musik=%DOSSCONF%\Ma musique
    set Videos=%DOSSCONF%\Mes Videos
    set Images=%DOSSCONF%\Mes Images
    set Internet=%DOSSCONF%\Internet¨
    
    ::vérification
    echo %Word%
    echo %Excel%
    pause
    fichier ini contient :
    Word=G:\Word
    Excel=G:\Excel
    PowerPoint=G:\Powerpoint
    PDF=G:\PDF
    Archives=G:\Mes Archives
    vrprogrmes=G:\Mes programmes
    Musik=G:\Ma musique
    Videos=G:\Mes Videos
    Images=G:\Mes Images
    Internet=G:\Internet
    Il me sort uniquement le résultat avec :
    G:\Internet\Word
    G:\Internet\Excel
    au lieu de :
    G:\Word
    G:\Excel
    Pourquoi ? quelqu'un peut il m'aider ?
    Merci d'avance

  2. #2
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Par défaut
    Il y a beaucoup plus simple...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for /f "tokens=1,2 delims==" %%I in ('type moveconf.ini') do SET %%I=%%J
    
    ::vérification
    echo %Word%
    echo %Excel%
    Tu as déjà le "nom" de la variable dans le fichier .INI, donc pourquoi ne pas l'utiliser directement ?
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

  3. #3
    Membre expérimenté
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    240
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2008
    Messages : 240
    Par défaut
    Merci Mac Lak ça semble fonctionner si je clique sur le batch mais pas si je glisse un fichier sur le bat.

    Mes chemins de dossiers ne sont pas trouvés et la création de mes dossiers ne peuvent pas s'effectuer.


    le but est de glisser déposer un fichier ou x fichiers sur le fichier bat pour qu'il soit déplacer vers le chemin défini dans le fichier ini.

    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    @echo off
    :: Line = Hauteur / Cols = Largeur
    ::color 0f & mode con LINES=30 COLS=88
    set nom=MoveFiles
    set ver=2.0
    title %nom%  v.%ver%  by Acris
    
    ::amelioration du projet movefiles : choisir les chemins des fichiers à glisser
    ::http://www.batchclipboard.info/?54-movefiles-v1-1b
    
    if exist "moveconf.ini" for /f "tokens=1,2 delims==" %%I in ('type moveconf.ini') do SET %%I=%%J
    
    :: ------------- Création des dossiers dans Mes Documents by Batch_Man
    if not exist "%Excel%" md "%Excel%"
    if not exist "%Word%" md "%Word%"
    if not exist "%PowerPoint%" md "%PowerPoint%"
    if not exist "%PDF%" md "%PDF%"
    if not exist "%Archives%" md  "%Archives%"
    if not exist "%vrprogrmes%" md "%vrprogrmes%"
    if not exist "%Musik%" md "%Musik%"
    if not exist "%Videos%" md "%Videos%"
    if not exist "%Images%" md "%Images%"
    if not exist "%Internet%" md "%Internet%"
    
    :encore
    if "%~pnx1"=="" goto FIN2
    
    ::mouvement pour les documents texte
    set WordEXE=.txt .doc
    
    for %%a in (%WordEXE%) do  if /i "%~x1"=="%%a" move "%~dpnx1" "%Word%" 2>nul >nul
    
    SHIFT
    GOTO ENCORE
    
    :FIN2
    pause
    @exit
    Le fichier semble se déplacer toujours vers C:\Documents and Settings\Acris
    une idée ? une explication ???
    mon bat d'origine qui envoie vers Mes documents fonctionne mais pas si les chemins sont stockés dans un fichier

    Réponse : mettre %~dp0moveconf.ini

  4. #4
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Par défaut
    Citation Envoyé par Acris Voir le message
    Réponse : mettre %~dp0moveconf.ini
    C'est en effet la technique à utiliser.
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

  5. #5
    Membre expérimenté
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    240
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2008
    Messages : 240
    Par défaut
    Merci,
    me reste à alléger un peu mon code

    MoveFiles v2

    Si vous avez des conseils ou astuces pour alleger mon code. conseillez moi.

    Si vous souhaitez diriger vos différents fichiers vers un autre disque ou partitions, créer sur le bureau avec votre fichier bat un fichier nommé moveconf.ini avec les chemins.

    Exemple : moveconf.ini

    Word=G:\Word
    Excel=G:\Excel
    PowerPoint=G:\Powerpoint
    PDF=G:\PDF
    Archives=G:\Mes Archives
    vrprogrmes=G:\Mes programmes
    Musik=G:\Ma musique
    Videos=G:\Mes Videos
    Images=G:\Mes Images
    Internet=G:\Internet

    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
    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
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    @echo off
    :: Line = Hauteur / Cols = Largeur
    color 0f & mode con LINES=12 COLS=38
    set nom=MoveFiles
    set ver=2.0
    title %nom%  v.%ver%  by Acris
    
    
    
    set WordEXE=.txt .doc
    set ExcelEXE=.xla .xls .xlt .xltm. xltx .xlam .xlsb .xlsm .xlsx .prn .csv
    set PDFEXE=.pdf
    set ArchivesEXE=.zip .rar .7z .CAB .ARJ .LZH .TAR .GZ .BZ2 .ACE .UUE .JAR .Z .gz .tgz .000 .arc .cbr .ear .efw .lha .mpkg .sea .sfx .uha .yz .z01 .zix .zoo .zz
    set PPointEXE=.pps .ppt .pptx .pptm .pot .potx .potm .pps .ppsx .ppsm
    set programEXE=.exe .msi .com .bat .vbs .pif .scr .vb .ws
    set MusikEXE=.mp3 .ogg .wma .mid .wav .aif .aiff .aifc .cda .idf .m3u .voc .aac .au .cdr .m4a .mp1 .mp2
    set VideoEXE=.mpg .avi .wmv .asf .divx .mkv .mov .mp4 .divx .3gp .dpg .evo .fli .flc .flv .ivr .m2v .m4v .mod .movie .mpe .qt .rm .vob .vro .xvid .yuv
    set ImagesEXE=.bmp .jpg .jpeg .gif .png .psd .ico .svg .cgm .dib .swf .tif .wpg .xcf .xbm .dcm .pbm .pgm  .xpm .pnm .ppm
    set InternetEXE=.htm .html .css .php .asp .cgi .xml .php3 .url .asp .aspx .dhtml .js .jsp .mhtml .rss .xpi
    
    if exist "%~dp0moveconf.ini"  goto createfolder
    if not exist "%~dp0moveconf.ini" goto createdesktopfolder
    
    :createfolder
    for /f "tokens=1,2 delims==" %%I in ('type "%~dp0moveconf.ini"') do SET %%I=%%J
    )
    :: ------------- Création des dossiers dans Mes Documents by Batch_Man
    if not exist "%Excel%" md "%Excel%"
    if not exist "%Word%" md "%Word%"
    if not exist "%PowerPoint%" md "%PowerPoint%"
    if not exist "%PDF%" md "%PDF%"
    if not exist "%Archives%" md  "%Archives%"
    if not exist "%vrprogrmes%" md "%vrprogrmes%"
    if not exist "%Musik%" md "%Musik%"
    if not exist "%Videos%" md "%Videos%"
    if not exist "%Images%" md "%Images%"
    if not exist "%Internet%" md "%Internet%"
    
    goto move
    
    
    
    
    :createdesktopfolder
    FOR /F "TOKENS=2,*" %%I IN ('REG QUERY "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" ^| FIND /I "Personal"') DO SET DOSS=%%J
    
    set inWord=%DOSS%\Word
    set inExcel=%DOSS%\Excel
    set inPowerPoint=%DOSS%\Powerpoint
    set inPDF=%DOSS%\PDF
    set inArchives=%DOSS%\Mes Archives
    set invrprogrmes=%DOSS%\Mes programmes
    set inMusik=%DOSS%\Ma musique
    set inVideos=%DOSS%\Mes Videos
    set inImages=%DOSS%\Mes Images
    set inInternet=%DOSS%\Internet
    
    
    :: ------------- Création des dossiers dans mes_documents by Batch_Man
    if not exist "%inExcel%" md "%inExcel%"
    if not exist "%inWord%" md "%inWord%"
    if not exist "%inPowerPoint%" md "%inPowerPoint%"
    if not exist "%inPDF%" md "%inPDF%"
    if not exist "%inArchives%" md  "%inArchives%"
    if not exist "%invrprogrmes%" md "%vrprogrmes%"
    if not exist "%inMusik%" md "%inMusik%"
    if not exist "%inVideos%" md "%inVideos%"
    if not exist "%inImages%" md "%Images%"
    if not exist "%inInternet%" md "%Internet%"
    
    goto movedesktop
    
    
    :move
    if "%~pnx1"=="" goto FIN2
    
    ::mouvement pour les documents texte
    for %%a in (%WordEXE%) do  if /i "%~x1"=="%%a" move "%~dpnx1" "%Word%" 2>nul >nul
    
    ::mouvement pour les feuilles de calculs
    for %%a in (%ExcelEXE%) do  if /i "%~x1"=="%%a" move "%~dpnx1" "%Excel%" 2>nul >nul
    
    ::mouvement pour les powerpoints
    for %%a in (%PPointEXE%) do  if /i "%~x1"=="%%a" move "%~dpnx1" "%PowerPoint%" 2>nul >nul
    
    ::mouvement pour les feuilles de pdf
    for %%a in (%PDFEXE%) do  if /i "%~x1"=="%%a" move "%~dpnx1" "%PDF%" 2>nul >nul
    
    ::mouvement pour les archives
    for %%a in (%ArchivesEXE%) do  if /i "%~x1"=="%%a" move "%~dpnx1" "%Archives%" 2>nul >nul
    
    ::mouvement pour les programmes
    for %%a in (%programEXE%) do  if /i "%~x1"=="%%a" move "%~dpnx1" "%vrprogrmes%" 2>nul >nul
    
    ::mouvement pour la musique
    for %%a in (%MusikEXE%) do  if /i "%~x1"=="%%a" move "%~dpnx1" "%Musik%" 2>nul >nul
    
    ::mouvement pour la video
    for %%a in (%VideoEXE%) do  if /i "%~x1"=="%%a" move "%~dpnx1" "%Videos%" 2>nul >nul
    
    ::mouvement pour les images et graphismes
    for %%a in (%ImagesEXE%) do  if /i "%~x1"=="%%a" move "%~dpnx1" "%Images%" 2>nul >nul
    
    ::mouvement des fichiers internet
    for %%a in (%InternetEXE%) do  if /i "%~x1"=="%%a" move "%~dpnx1" "%Internet%" 2>nul >nul
    
    ::+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    ::movement des dossiers à faire 
    ::variable pour compter
    IF NOT EXIST "%DOSS%\%~n1" (
         MOVE %1 "%DOSS%"
         GOTO FIN)
    
    FOR /F "TOKENS=*" %%A IN ('DIR /B "%DOSS%" ^| FIND "%~n1"') DO (
         SET /A COMPT+=1)
    
    REN "%~1" "%~n1_%COMPT%"
    MOVE "%~dpn1_%COMPT%" "%DOSS%"
    
    ::+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    SHIFT
    GOTO move
    
    
    
    :movedesktop
    if "%~pnx1"=="" goto FIN2
    
    ::mouvement pour les documents texte
    for %%a in (%WordEXE%) do  if /i "%~x1"=="%%a" move "%~dpnx1" "%inWord%" 2>nul >nul
    
    
    ::mouvement pour les feuilles de calculs
    for %%a in (%ExcelEXE%) do  if /i "%~x1"=="%%a" move "%~dpnx1" "%inExcel%"  2>nul >nul
    
    
    ::mouvement pour les powerpoints
    for %%a in (%PPointEXE%) do  if /i "%~x1"=="%%a" move "%~dpnx1" "%inPowerPoint%"  2>nul >nul
    
    
    ::mouvement pour les feuilles de pdf
    for %%a in (%PDFEXE%) do  if /i "%~x1"=="%%a" move "%~dpnx1" "%inPDF%" 2>nul >nul
    
    
    ::mouvement pour les archives
    for %%a in (%ArchivesEXE%) do  if /i "%~x1"=="%%a" move "%~dpnx1" "%inArchives%" 2>nul >nul
    
    ::mouvement pour les programmes
    for %%a in (%programEXE%) do  if /i "%~x1"=="%%a" move "%~dpnx1" "%invrprogrmes%" 2>nul >nul
    
    
    ::mouvement pour la musique
    for %%a in (%MusikEXE%) do  if /i "%~x1"=="%%a" move "%~dpnx1" "%inMusik%" 2>nul >nul
    
    
    ::mouvement pour la video
    for %%a in (%VideoEXE%) do  if /i "%~x1"=="%%a" move "%~dpnx1" "%inVideos%" 2>nul >nul
    
    
    ::mouvement pour les images et graphismes
    for %%a in (%ImagesEXE%) do  if /i "%~x1"=="%%a" move "%~dpnx1" "%inImages%" 2>nul >nul
    
    
    ::mouvement des fichiers internet
    for %%a in (%InternetEXE%) do  if /i "%~x1"=="%%a" move "%~dpnx1" "%inInternet%" 2>nul >nul
    
    
    ::movement des dossiers
    ::variable pour compter
    IF NOT EXIST "%DOSS%\%~n1" (
         MOVE %1 "%DOSS%"
         GOTO FIN)
    
    FOR /F "TOKENS=*" %%A IN ('DIR /B "%DOSS%" ^| FIND "%~n1"') DO (
         SET /A COMPT+=1)
    
    REN "%~1" "%~n1_%COMPT%"
    MOVE "%~dpn1_%COMPT%" "%DOSS%"
    
    
    
    SHIFT
    GOTO movedesktop
    
    
    :FIN2
    @exit
    Auriez vous une astuce qui permet d'empecher la fenetre dos de s'ouvrir lorsqu'on glisse des fichiers ?
    Ja'i testé runhiddenconsole, cmdow rien n'y fait elle s'ouvre

  6. #6
    Membre Expert
    Avatar de I'm_HERE
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 013
    Par défaut
    Salut,

    pas bien tester !


    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    @if %_%$==$ (
      echo set "_path=%~f1" >\~.bat
      set _=_&start "%~nx0" /min %Comspec% /c%0 call \~.bat
      set _=&goto:EOF
    )
    @echo off
    setlocal enabledelayedexpansion
    %*
    ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    set "txtfile=*.txt
    set "pdffile=*.pdf"
    set "webfile=*.htm *.css *.php *.asp *.cgi *.xml *.php3 *.js"
    set "imgfile=*.jpg *.bmp *.gif *.png *.ico *.svg *.tif"
    set "exefile=*.exe *.msi *.com *.bat *.vbs *.scr *.cmd *.pl *.cmd"
    set "myvideo=*.mpg *.avi *.wmv *.divx *.3gp *.flv" 
    set "archive=*.zip *.rar *.cab *.7z"
    set "myMusic=*.mp3 *.ogg *.wma *.mid *.wav *.aif"
    set "xlsfile=.xla .xls .xlt"
    set "pptfile=.pps .ppt .pptx .pptm .pot .potx .potm .pps"
    :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    pushd "%_path%"
    2>nul ^
    ( 
      for /f "Usebacktokens=1*delims==" %%( in ("%~dp0infile.txt") do (
          set %%(="%%)"
          set src=!src! "%%)"
       )
      md !src! 
      call :MoveFilesExt !src!
    )
    del \~.bat
    popd & endlocal & goto:EOF
    :MoveFilesExt
      for %%a in ( %txtfile% ) do move /y "%%a" %txt%
      for %%a in ( %webfile% ) do move /y "%%a" %Internet%
      for %%a in ( %imgfile% ) do move /y "%%a" %Images%
      for %%a in ( %exefile% ) do move /y "%%a" %executables%
      for %%a in ( %myvideo% ) do move /y "%%a" %videos%
      for %%a in ( %archive% ) do move /y "%%a" %Archives%
      for %%a in ( %pdffile% ) do move /y "%%a" %Pdf%
      for %%a in ( %myMusic% ) do move /y "%%a" %Musik%
      for %%a in ( %xlsfile% ) do move /y "%%a" %Excel%
      for %%a in ( %pptfile% ) do move /y "%%a" %PowerPoint%
    shift
    if not ["%~1"]==[""] goto:MoveFilesExt
    exit /b
    avec comme fichier d'entrée "infile.txt"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Word=d:\chemin\Word
    Excel=d:\chemin\Excel
    PowerPoint=d:\chemin\Powerpoint
    PDF=d:\chemin\PDF
    executables=D:\chemin\Mes programmes
    Archives=d:\chemin\Mes Archives
    Musik=d:\chemin\Ma musique
    Videos=d:\chemin\Mes Videos
    Images=d:\chemin\Mes Images
    Internet=d:\chemin\Internet
    txt=d:\chemin\TXT
    à toi de l'adapter à tes besoins

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 17/02/2012, 10h22
  2. [Batch] Créer et utiliser 2 variables pour chaque ligne d'un fichier
    Par Marc_L dans le forum Scripts/Batch
    Réponses: 1
    Dernier message: 02/12/2011, 00h22
  3. envoyer chaque ligne d'un fichier vers une liste de fichiers
    Par cobaltsixty dans le forum Shell et commandes GNU
    Réponses: 11
    Dernier message: 29/08/2011, 11h05
  4. Réponses: 13
    Dernier message: 20/11/2006, 17h46
  5. Réponses: 4
    Dernier message: 19/06/2004, 22h28

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