MS-DOS traiter un fichier par blocs
Résolu
xam3010
Messages postés
21
Date d'inscription
Statut
Membre
Dernière intervention
-
xam3010 Messages postés 21 Date d'inscription Statut Membre Dernière intervention -
xam3010 Messages postés 21 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Je suis chargé de transcrire des scripts UNIX en MS-DOS et j'ai un problème.
Le script doit ejecter les bandes d'un robot TSM après sauvegarde, le problème c'est que seule 6 bandes peuvent être éjectées à la fois. Le script UNIX utilise la commande SPLIT (non disponible sou Windows).
Je récupère une liste de bandes à éjecter dans le fichier toto.list et ce que j'aimerai faire c'est :
Lancer l'ejection de 6 bandes
Afficher un message "Appuyez sur Enter quand les bandes ont été retirées"
Lancer l'ejection des 6 bandes suivantes
...
Sachant que :
- Une bande est désignée par un identifiant du type "L0......"
- Je peux éjecter 6 bandes à la fois
- le nombre de bandes à éjecter peut être différent à chaque fois.
Pour le moment mon ébauche de syntaxe est la suivante :
set temp= find /c "L0" toto.list
set nb_bandes=1+(%temp%/6)
FOR (i=1,i++,i=%nb_bandes%) do
(
FOR /F %%i in (toto.list) do (
# COMMANDE TSM d'ejection
)
echo "Appuyez sur Enter quand les bandes ont été retirées"
)
J'ai tenté de diviser le nombre total de bandes par 6 et ajouter 1 pour avoir le nombre de tours à faire mais c'est un peu bricolage et si il y a un nombre de bande qui est diviseur de 6 genre (6,12,18,24..), la boucle fera un tour pour rien..
J'espère avoir été clair..
Merci par avance !
Je suis chargé de transcrire des scripts UNIX en MS-DOS et j'ai un problème.
Le script doit ejecter les bandes d'un robot TSM après sauvegarde, le problème c'est que seule 6 bandes peuvent être éjectées à la fois. Le script UNIX utilise la commande SPLIT (non disponible sou Windows).
Je récupère une liste de bandes à éjecter dans le fichier toto.list et ce que j'aimerai faire c'est :
Lancer l'ejection de 6 bandes
Afficher un message "Appuyez sur Enter quand les bandes ont été retirées"
Lancer l'ejection des 6 bandes suivantes
...
Sachant que :
- Une bande est désignée par un identifiant du type "L0......"
- Je peux éjecter 6 bandes à la fois
- le nombre de bandes à éjecter peut être différent à chaque fois.
Pour le moment mon ébauche de syntaxe est la suivante :
set temp= find /c "L0" toto.list
set nb_bandes=1+(%temp%/6)
FOR (i=1,i++,i=%nb_bandes%) do
(
FOR /F %%i in (toto.list) do (
# COMMANDE TSM d'ejection
)
echo "Appuyez sur Enter quand les bandes ont été retirées"
)
J'ai tenté de diviser le nombre total de bandes par 6 et ajouter 1 pour avoir le nombre de tours à faire mais c'est un peu bricolage et si il y a un nombre de bande qui est diviseur de 6 genre (6,12,18,24..), la boucle fera un tour pour rien..
J'espère avoir été clair..
Merci par avance !
A voir également:
- MS-DOS traiter un fichier par blocs
- Fichier bin - Guide
- Comment réduire la taille d'un fichier - Guide
- Comment ouvrir un fichier epub ? - Guide
- Fichier rar - Guide
- Fichier .dat - Guide
2 réponses
hello
ce script simule split.
il va couper le fichier bandes.txt en fichiers de 6 lignes appellé bandes-X.txt
ce script simule split.
il va couper le fichier bandes.txt en fichiers de 6 lignes appellé bandes-X.txt
@echo off set /a c=0 set /a c2=0 setlocal enableDelayedExpansion for /F "delims=" %%a in ('type bandes.txt') do ( set /a x=!c! %% 6 if !x! EQU 0 set /a c2+=1 set nom=bandes-!c2!.txt echo %%a >> !nom! set /a c+=1 )