Programme en DOs
Résolu
rastaman31
Messages postés
19
Statut
Membre
-
rastaman31 Messages postés 19 Statut Membre -
rastaman31 Messages postés 19 Statut Membre -
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
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
A voir également:
- Programme en DOs
- Programme demarrage windows - Guide
- Mettre en veille un programme - Guide
- Programme word gratuit - Guide
- Message programmé - Guide
- Desinstaller un programme - Guide
5 réponses
hello
pour assigner des variables dans une boucle for, il faut utiliser des ! au lieu des % et SETLOCAL enableDelayedExpansion
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!
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"
)
FOR /F "delims=" %%A IN ('DIR /B /S /AD "%SOURCE%" ^| FINDSTR /I "CESAR DATA"') DO (
CD /D "%%A"
)
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
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question