Programme en DOs

Résolu/Fermé
rastaman31 Messages postés 18 Date d'inscription mercredi 30 septembre 2009 Statut Membre Dernière intervention 13 février 2012 - 9 oct. 2009 à 09:21
rastaman31 Messages postés 18 Date d'inscription mercredi 30 septembre 2009 Statut Membre Dernière intervention 13 février 2012 - 12 oct. 2009 à 13:14
Bonjour,je vous savoir si une variable peut être déclarer dans une boucle for.
Voici mon problème, j'ai un petit programme en DOS que j'ai mis dans un fichier.bat.Ce programme utilise un service interne de mon entreprise.La fonction du programme de te regarde dans un chemin précis et de transférer des fichier du chemin sur mon serveur(Noyau Linux). Mais les nom des fichiers,on un espace et pour linux un espace est un autre fichiers donc j'aimerai surprimé cette espace.
Par exemple :
SET FILE="AZERTY 2009.xls"
SET FILE=%FILE: =_%
ECHO FILE=%FILE%
Cette exemple marche,Mais j'aimerais le mettre dans un for.Mais quand je le met cette exemple dans le for il me dit que dans la variable il a rein Help Me (le for qui m'interres est le "FOR %%M IN (*.*) DO ("

Voici mon programme :

@ECHO OFF && SETLOCAL ENABLEDELAYEDEXPANSION
REM --------------------------------------------------------------------------
REM TRANSFERT DES FICHIERS TEST SUR SERVEUR ARCHIVAGE VIA STDLA
REM POUR DES MACHINES NT4
REM --------------------------------------------------------------------------
REM V1.00 30-JUL-2009 TI : Creation
REM V1.10 29-SEP-2009 TI : Correction bug (errorlevel)


REM Sauvegarde le chemin de depart
REM ------------------------------
PUSHD %CD%

REM Chemin source et destination
REM ----------------------------
SET SOURCE=D:\CESAR\
SET TARGET=/shares/archive/temp/

REM Variables a modifier en fonction de la ligne
REM --------------------------------------------
SET NOMLIGNE=KS4


REM Variables fixes
REM ---------------
SET APPLI=dcsmb
SET REFLOG=transfer_file_to_bous00ax
SET SERVER=bous00ax
SET LOGFILE=C:\users\applis\stdla\stdla.log
SET TYPFICH=PUT
SET TYPACT="0"
SET ACTION=""
SET PARAMAPPEL=""
SET STDLA=C:\users\applis\stdla\test.exe
REM Efface ancien fichier log
IF EXIST %LOGFILE% DEL /F /Q %LOGFILE%

REM Lance le transfert
REM ------------------

REM exemple (source) d:\users\applis\TesteurCIRS\config\Mesures\KLT123456\archives\*.*
FOR /F %%A IN ('DIR /B /S /AD "%SOURCE%" ^| FINDSTR /I "CESARDATA"') DO (
CD /D %%A
FOR /F "tokens=2 delims=\" %%C IN ('ECHO %%A') DO (
FOR %%M IN (*.*) DO (
SET FILE=%%M
SET FILE1=%FILE: =_%
ECHO M=%%M
ECHO FILE=%FILE%

ECHO FILE1=%FILE1%

%STDLA% %APPLI% "%REFLOG%:%FILE%" %SERVER% %LOGFILE% %TYPFICH% "%FILE%" "%TARGET%%COMPUTERNAME%.%NOMLIGNE%.%FILE%" %TYPACT% %ACTION% %PARAMAPPEL%
FOR /F "tokens=2" %%Z IN ('FINDSTR /I "%FILE%" %LOGFILE%') DO (
ECHO ERREUR STDLA = %%Z FICHIER %FILE%
IF %%Z==0 DEL /F /Q "%FILE%"
)
)
)
)

REM ECHO %STDLA% %APPLI% %REFLOG% %SERVER% %LOGFILE% %TYPFICH% "%%M" "%TARGET%%COMPUTERNAME%.%NOMLIGNE%.%%C.%%M" %TYPACT% %ACTION% %PARAMAPPEL%
REM exemple (retour) : /share/archive/temp/bousks24.KS_CIRS.VERSION.xxxxxxx.csv

:END

REM Restitue le chemin de depart
REM ----------------------------
POPD

REM FIN
ENDLOCAL

merci

5 réponses

dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
9 oct. 2009 à 11:58
hello
pour assigner des variables dans une boucle for, il faut utiliser des ! au lieu des % et SETLOCAL enableDelayedExpansion

SETLOCAL enableDelayedExpansion
FOR %%M IN (*.*) DO (
SET FILE=%%M
SET FILE1=!FILE: =_!
ECHO M=%%M
ECHO FILE1=!FILE1! 
2
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
12 oct. 2009 à 12:10
si il y a un espace, il utiliser delims pour que le FOR traite toute ligne et des "
FOR /F "delims=" %%A IN ('DIR /B /S /AD "%SOURCE%" ^| FINDSTR /I "CESAR DATA"') DO (
CD /D "%%A"
)
2
rastaman31 Messages postés 18 Date d'inscription mercredi 30 septembre 2009 Statut Membre Dernière intervention 13 février 2012
9 oct. 2009 à 17:30
ok merci je vais essayé lundi je te dirai sa si sa marche
0
rastaman31 Messages postés 18 Date d'inscription mercredi 30 septembre 2009 Statut Membre Dernière intervention 13 février 2012
12 oct. 2009 à 11:19
Merci Beaucoup Sa marche je récupère bien le non du fichier sans espace
Mais par contre le répertoire où il y a les fichiers qui m'intéresse il y a un espace dans le nom du dossiers

regarde ::

FOR /F %%A IN ('DIR /B /S /AD "%SOURCE%" ^| FINDSTR /I "CESAR DATA"') DO (
CD /D %%A
)
SOURCE== D:\CESAR
REsultat : A== D:\CESAR\CESAR

il ne prendre pas le data apres cesar et je comprend pas.Si tu peux m'aide
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
rastaman31 Messages postés 18 Date d'inscription mercredi 30 septembre 2009 Statut Membre Dernière intervention 13 février 2012
12 oct. 2009 à 13:14
Merci Sa marche . MERCI BEAUCOUP grâce a toi mon programme marche parfaitement
0