OVH Cloud OVH Cloud

.bat

13 réponses
Avatar
Pascal pascal-guillemot
Bonsoir à tous.
J'ai fait un fichier .bat basique qui copie les fichiers d'un répertoire sur
une disquette.
L'extension des fichiers est amenée à changer tous les mois.
.308 pour les fichiers du mois d'août
.309 pour ceux de septembre.
Tous les mois je dois donc modifier les commandes de copie de mon .bat en y
changeant les extensions.
L'un ou l'une d'entre vous aurait-il une astuce pour automatiser ce
changement d'extension ?
Merci beaucoup.
Au revoir et à bientôt.
Pascal.

10 réponses

1 2
Avatar
Alexandre
"Pascal pascal-guillemot" a écrit dans
le message de news:3f7f2a04$0$20953$
Bonsoir à tous.
J'ai fait un fichier .bat basique qui copie les fichiers d'un répertoire


sur
une disquette.
L'extension des fichiers est amenée à changer tous les mois.
.308 pour les fichiers du mois d'août
.309 pour ceux de septembre.
Tous les mois je dois donc modifier les commandes de copie de mon .bat en


y
changeant les extensions.
L'un ou l'une d'entre vous aurait-il une astuce pour automatiser ce
changement d'extension ?
Merci beaucoup.
Au revoir et à bientôt.
Pascal.




ça n'a pas beaucoup de rapport avec la programmation windows...
Mais bon, le plus rapide c'est de créer un programme avec un langage comme
C++, qui soit fera le boulot à la place de ton .bat, soit crée le .bat à ta
place.
Avatar
Pascal pascal-guillemot
Bonjour Alexandre.
Bonjour à tous.
Merci de ta réponse mais je n'y connais rien en C++
J'ai déjà fait un miracle en faisant un .bat !
Maintenant si tu t'y connais et que tu es prêt à me mâcher le boulot, je
suis bien sûr preneur, car il y a 200 extensions de fichiers à renommer
mensuellement.
Au revoir et merci.
Pascal.
Avatar
Christian ASTOR
Pascal pascal-guillemot wrote:

J'ai fait un fichier .bat basique qui copie les fichiers d'un répertoire sur
une disquette.
L'extension des fichiers est amenée à changer tous les mois.
.308 pour les fichiers du mois d'août
.309 pour ceux de septembre.



.BAT => HS

Rapide Win32 ex à 0.3 € (sans récursivité entre autres) =>
(ex appel : "[Nom_exe] c:toto a:")

#define STRICT
#include <windows.h>
#include <stdlib.h>

#define IsRelativeDir(file) ((strcmp(file,".")==0) ||
(strcmp(file,".."))==0)

int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
WIN32_FIND_DATA fd;
HANDLE hFind;
char sSource[MAX_PATH], sDest[MAX_PATH], sBuffer[255], sExt[3];
int nCpt=0;
SYSTEMTIME time1;
GetLocalTime(&time1);
wsprintf(sExt, ".%02d%02d", time1.wYear-2000, time1.wMonth);
UINT nErrorMode = SetErrorMode(SEM_FAILCRITICALERRORS);
if (__argc < 3)
{
MessageBox(NULL, "Arg 1 : Source Dir. - Arg 2 : Destination Dir.nEx :
'c:toto a:'", "Error", MB_OK | MB_ICONSTOP);
return 1;
}
strcpy(sSource, __argv[1]);
strcat(sSource, "*.*");
hFind = FindFirstFile(sSource, &fd);
do
{
if (!IsRelativeDir(fd.cFileName) && !(fd.dwFileAttributes &
FILE_ATTRIBUTE_DIRECTORY))
{
strcpy(sSource, __argv[1]);
strcat(sSource, "");
strcat(sSource, fd.cFileName);
strcpy(sDest, __argv[2]);
strcat(sDest, "");
strcat(sDest, fd.cFileName);
strcat(sDest, sExt);
if (!CopyFile(sSource, sDest, FALSE))
{
wsprintf (sBuffer, "CopyFile() Error : %d", GetLastError());
MessageBox(NULL, sBuffer,"Error", MB_OK| MB_ICONSTOP);
break;
}
nCpt++;
}
} while(FindNextFile(hFind, &fd));
FindClose(hFind);
SetErrorMode(nErrorMode);
if (nCpt>0)
{
wsprintf (sBuffer, "%d file(s) successfully copied", nCpt);
MessageBox(NULL, sBuffer,"Information", MB_OK| MB_ICONINFORMATION);
}
return 0;
}
Avatar
Christian ASTOR
Pascal pascal-guillemot wrote:

J'ai fait un fichier .bat basique qui copie les fichiers d'un répertoire sur
une disquette.
L'extension des fichiers est amenée à changer tous les mois.
.308 pour les fichiers du mois d'août
.309 pour ceux de septembre.



.BAT => HS

Rapide Win32 ex à 0.3 € (sans récursivité entre autres) =>
(ex appel : "[Nom_exe] c:toto a:")

#define STRICT
#include <windows.h>
#include <stdlib.h>

#define IsRelativeDir(file) ((strcmp(file,".")==0) ||
(strcmp(file,".."))==0)

int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
WIN32_FIND_DATA fd;
HANDLE hFind;
char sSource[MAX_PATH], sDest[MAX_PATH], sBuffer[255], sExt[6];
int nCpt=0;
SYSTEMTIME time1;
GetLocalTime(&time1);
wsprintf(sExt, ".%02d%02d", time1.wYear-2000, time1.wMonth);
UINT nErrorMode = SetErrorMode(SEM_FAILCRITICALERRORS);
if (__argc < 3)
{
MessageBox(NULL, "Arg 1 : Source Dir. - Arg 2 : Destination
Dir.nEx : 'c:toto a:'", "Error", MB_OK | MB_ICONSTOP);
return 1;
}
strcpy(sSource, __argv[1]);
strcat(sSource, "*.*");
hFind = FindFirstFile(sSource, &fd);
do
{
if (!IsRelativeDir(fd.cFileName) && !(fd.dwFileAttributes &
FILE_ATTRIBUTE_DIRECTORY))
{
strcpy(sSource, __argv[1]);
strcat(sSource, "");
strcat(sSource, fd.cFileName);
strcpy(sDest, __argv[2]);
strcat(sDest, "");
strcat(sDest, fd.cFileName);
strcat(sDest, sExt);
if (!CopyFile(sSource, sDest, FALSE))
{
wsprintf (sBuffer, "CopyFile() Error : %d",
GetLastError());
MessageBox(NULL, sBuffer,"Error", MB_OK| MB_ICONSTOP);
break;
}
nCpt++;
}
} while(FindNextFile(hFind, &fd));
FindClose(hFind);
SetErrorMode(nErrorMode);
if (nCpt>0)
{
wsprintf (sBuffer, "%d file(s) successfully copied", nCpt);
MessageBox(NULL, sBuffer,"Information", MB_OK| MB_ICONINFORMATION);
}
return 0;
}
Avatar
Nicolas Repiquet
"Pascal pascal-guillemot" a écrit dans
le message news: 3f7f2a04$0$20953$
Bonsoir à tous.
J'ai fait un fichier .bat basique qui copie les fichiers d'un répertoire


sur
une disquette.
L'extension des fichiers est amenée à changer tous les mois.
.308 pour les fichiers du mois d'août
.309 pour ceux de septembre.
Tous les mois je dois donc modifier les commandes de copie de mon .bat en


y
changeant les extensions.
L'un ou l'une d'entre vous aurait-il une astuce pour automatiser ce
changement d'extension ?
Merci beaucoup.
Au revoir et à bientôt.
Pascal.



Tout ce que je peut te dire, c'est que %DATE% contient la date. Après, pour
en extraire le dernier chiffre de l'année ... mystère pour moi.

-- Nicolas Repiquet
Avatar
Pascal pascal-guillemot
Bonsoir Nicolas.
Merci pour ta participation.
Une nouvelle piste pour moi, à exploiter.
Pascal.
Avatar
Pascal pascal-guillemot
Merci beaucoup Christian.
Merci pour tout ce temps investi pour ma question.
Mais comment utiliser toutes ces lignes de code ?
Je vais faire une méningite !
Merci.
Pascal.
Avatar
Remi Thomas
Pascal pascal-guillemot wrote:
Bonsoir à tous.
J'ai fait un fichier .bat basique qui copie les fichiers d'un
répertoire sur une disquette.
L'extension des fichiers est amenée à changer tous les mois.
.308 pour les fichiers du mois d'août
.309 pour ceux de septembre.
Tous les mois je dois donc modifier les commandes de copie de mon
.bat en y changeant les extensions.
L'un ou l'une d'entre vous aurait-il une astuce pour automatiser ce
changement d'extension ?
Merci beaucoup.
Au revoir et à bientôt.
Pascal.



Une méthode plus simple que Christian Astor est d'appeler un autre .bat avec
les bons arguments.

#include <stdio.h>
#include <windows.h>
void main(int argc, char **argv)
{
printf ("Syntaxe: %s fichier_bat prefixe_chainern", argv[0]);
if (argc>2)
{
// Récupérer l'heure
SYSTEMTIME time;
GetLocalTime(&time);
// Fabriquer la chaîne
char buffer[512];
wsprintf (buffer, "%s %s%d", argv[1], argv[2], time.wMonth);
switch(WinExec(buffer, SW_SHOW))
{
case ERROR_BAD_FORMAT: printf ("Erreur: Pb format chaine de
commandern"); break;
case ERROR_FILE_NOT_FOUND: printf ("Erreur: Fichier non trouvern");
break;
case ERROR_PATH_NOT_FOUND: printf ("Erreur: Chemin non trouvern");
break;
}
}
}

Ensuite dans le bat appelé tu retrouve la valeur dans %1, à toi de
l'utiliser pour faire tes renommage.

Rémi

--
Rémi Thomas - MVP Visual Studio .NET
Développeur Windows indépendant
http://www.xtware.com/cv
Avatar
Philippe Mignard
et pourquoi pas indiquer l'extension en paramètre de la ligne de
commande? (%1)

A+

Pascal pascal-guillemot wrote:

Bonjour Alexandre.
Bonjour à tous.
Merci de ta réponse mais je n'y connais rien en C++
J'ai déjà fait un miracle en faisant un .bat !
Maintenant si tu t'y connais et que tu es prêt à me mâcher le boulot, je
suis bien sûr preneur, car il y a 200 extensions de fichiers à renommer
mensuellement.
Au revoir et merci.
Pascal.




Avatar
A. P.
"Pascal pascal-guillemot"
changeant les extensions.
L'un ou l'une d'entre vous aurait-il une astuce pour automatiser ce
changement d'extension ?
Merci beaucoup.
Au revoir et à bientôt.
Pascal.



Nous sommes en octobre 2003,
donc tes extensions deviennent 310

tu lances ton. bat suivi de 309 310
Dans ton .bat, tu remplaces les extensions des programmes
à copier par %1 et les extensions des fichiers destinataires par %2

ex.:
@echo off

copy monfic.%1 monfic.%2 > nul
if errorlevel == 0 goto suivant1
goto erreur

:suivant1
etc.

echo dummy dummy.%1 (pour éviter les messages "fichiers
introuvables......")
del *.%1 > nul

goto end

:erreur
echo erreur copie
goto end
echo copie ok

end
pause (pour avoir le temps de lire les
messages)

exit


Les autres solutions c'est du c++.
Je prends note, d'ailleurs, pour moi-même.
Il te faut un compilateur C++ pour faire un exécutable.

Pour perfectionner voir newsgroup sur le dos
Bien à toi,

A.P.
1 2