Utilisation Ms-Dos , Remplir un fichier .sql

Résolu/Fermé
Davletuner - 1 mai 2009 à 21:00
 Davletuner - 2 mai 2009 à 21:14
Bonjour,
je suis entrain de créer un programme Batch (.bat) qui permet par exemple de trouver tous les fichiers d'une même extension et de les intégrer dans un premier temps dans un fichier .sql puis ce programme créer une base de donnée comportant les informations.

Mon problème :
- Je souhaiterais que quand j'exécute un dir /b *.avi >> Test.sql par exemple, qu'il me crée un fichier avec INSERT INTO `Les films` ( La liste des variable) VALUES ( le nom du film , la taille ...);

Avec le nom et la taille correct, je vient de passer 3h sur ce probleme que j'arrive pas a résoudre.

-Dans un second temps , je souhaiterais que ce même fichier Test.sql soit directement dans un dossier que j'ai choisi , comment faire ?


Merci a tous , vous pouvez me mailer à Davletuner arobase hotmail point com

J'ai mis l'adresse hotmail comme sa pour eviter les bots spammer ;)
A voir également:

29 réponses

Utilisateur anonyme
1 mai 2009 à 21:48
Salut,

Pour le premier problème, je ne sais pas, et je n'ai pas trop le temps la, je verrai demain si j'y arrive...

Par contre, pour :
"je souhaiterais que ce même fichier Test.sql soit directement dans un dossier que j'ai choisi , comment faire?"

Essaies ceci :

dir /b *.avi >> "C:\Mon_dossier\Mon_sous_dossier\Test.sql"



@+
1
Je vient d'essayer , cela marche niquel , je ne sais pas pourquoi je n'ai pas essayer directemnt :)

Merci a toi H4RDW4RE.
1
Utilisateur anonyme
1 mai 2009 à 22:03
De rien =D

Pour ton premier problème, je n'ai pas trop compris. Tu veut qu'il y ai afficher quoi exactement dans ton fichier SQL ?
1
En faite mon programme crée une base de donnée , et je souhaiterais grace au dir du ms dos de remplir les Insert Into afin de remplir cette même base de donnée.

Sa donnerais environ sa :

INSERT INTO `Films` (`id`, `nom`, `taille`) VALUES(, 'Disco', 630);

Si biensur le Film Disco est sur mon Pc
1

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

Posez votre question
salut

en fait, le résultat de dir n'est pas aisément manipulable : il sera très difficile de construire une requête avec ça.
par contre, on peut très bien imaginer une mini mise en forme grace au for /f avec quelques options bien placées...
genre
for /f "usebackq tokens=1,3-4" %i in (`dir *.avi|find /i ".AVI"`) do echo insert into `table`(nom, date, taille) values('%k', '%i', to_number(%j));>>mesrequetes.sql

avec auparavant l'écriture d'une fonction (je sais pas si c'est possible avec ton moteur) to_nmber() supprimant 0xff (ou je sais plus trop ce qui est utilisé) dans la taille car la taille affiché a des séparateurs de milliers qui rendent la valeur non numérique

plus d'infos : for /?

Amuse-toi bien
1
dubcek Messages postés 18758 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 24 décembre 2024 5 623
2 mai 2009 à 17:46
dans un .bat il faut utiliser double %
help for
Pour utiliser la commande FOR dans un programme de commandes, spécifiez
%%variable au lieu de %variable. Les noms de variables respectent la
casse, donc %i est différent de %I.
1
Utilisateur anonyme
1 mai 2009 à 22:41
Ouaaaaa, ça va être tendu...

Mais je vais essayé sa demin (je suis pas sur de trouver), je te redis dans tout les cas où sa en est.

@+
0
Très bien merci a vous deux.

Je testerais demain , pour info le séparateur de millier si est le même que pour le dir il faut faire /-C

Merci encore
0
Alors j'ai tester ton code othanga , mais le problème c'est que le dir va mettre aussi le nombre de fichiers , les octets au total ...
ce qui donne un code tres moche xD :
insert into `table`( id, nom, date, taille) values('','le', 'Le', dans);
insert into `table`( id, nom, date, taille) values('','s‚rie', 'Le', de);
insert into `table`( id, nom, date, taille) values('','', 'R‚pertoire', Mon Dossier);
insert into `table`( id, nom, date, taille) values('','Films1', '30/04/2009', 733413376);
insert into `table`( id, nom, date, taille) values('','octets', '1', 733413376);
insert into `table`( id, nom, date, taille) values('','octets', '0', 224641912832);
insert into `table`( id, nom, date, taille) values('','le', 'Le', dans);
insert into `table`( id, nom, date, taille) values('','s‚rie', 'Le', de);
insert into `table`( id, nom, date, taille) values('','', 'R‚pertoire', Mon dossier);
insert into `table`( id, nom, date, taille) values('','Films1', '30/04/2009', 733413376);
...
Mon Dossier>for /f "usebackq tokens=1,3-4" %i in (`dir /s /-C *.avi`) do echo insert into `table`( id, nom, date, taille) values('','%k', '%i', %j);>> test.sql

Je vais chercher s'il y a pas moyen de recup correctement les données
0
En faite le probleme vient du "|" car or syntaxe cela marche niquel , mais des que je l'introduit dans le for , sa me marque qu'il est inatendu

for /f "usebackq tokens=1,3-4" %i in (`dir /-C /s *.avi|find /i ".AVI"`) do echo insert into `table`( id, nom, date, taille) values('','%k', '%i', to_number(%j));>> Test.sql

Voici la requete tester
0
dubcek Messages postés 18758 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 24 décembre 2024 5 623
2 mai 2009 à 14:07
hello
essaye avec ^|
for /f "usebackq tokens=1,3-4" %i in (`dir /-C /s *.avi^|find /i ".AVI"`
0
Je vient de tester en cela marche niquel :)
Merci dubcek.

Maintenant le probleme c'est que mon .bat ne l'execute pas.

Explication :
- L'utilisateur entre le chemin ou rechercher les films ou autres

ECHO Veillez donner le chemin que vous voulez et l'extension du(des) fichier(s)
set /p chemin= Chemin :
if %chemin%. == . set chemin=C:\Users\David\Downloads rem Donnée par defaut
set /p ext=Extension :
if %ext%. == . set ext=avi rem Donnée par defaut
set /p nom=Nom du fichier a cr‚er :
if %nom%. == . set nom=Films rem Donnée par defaut



cd %chemin%

for /f "usebackq tokens=1,3-4" %i in (`dir /-C /s *.avi ^|find /i ".AVI"`)
do echo insert into `table`( id, nom, date, taille,type) values('','%k', '%i', '%j','Films'); >> "C:\Users\David\Desktop\Projet Archivage\%nom%.sql"

pause


Dès qu'il execute il ferme le programme , je vais regarder les info du for
0
Oui , je vient de voir sa .

Je vais tester , je vous tient au courant ;)
0
اريد بروقرام
Bonjour, En train d'éssayer de passer à Linux pour faire le développement php que je faisais sous Win XP, j'ai installé XAMPP. Tout a l'air d'aller, sauf l'import de tables sous PhpMyAdmin à partir de fichiers .sql générés par la fonction export d'une... www.commentcamarche.net/forum/affich-6833436-phpmyadmin-pb-import-fichier-sql
Forum
0
dubcek Messages postés 18758 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 24 décembre 2024 5 623
2 mai 2009 à 18:04
dans ton script, je changerais
for /f "usebackq tokens=1,3-4"
par
for /f "usebackq tokens=1,3,*"
car si il y a un espace dans le nom du fichier, 4 ne représente que le debut du nom
0
Voila mon programme marche bien now , ma derniere erreur étit un retour a la ligne qui faisait planter le programme :)

Merci a vous tous :)
0
dubcek Messages postés 18758 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 24 décembre 2024 5 623
2 mai 2009 à 18:06
regarde mon post 15
0
Oui je l'avait modifier dans mon programme déja ;)

Merci encore a vous :)
0
dubcek Messages postés 18758 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 24 décembre 2024 5 623
2 mai 2009 à 18:09
pour
if %chemin%. == . set chemin=
tu peux utiliser la variable %CD% qui représente le chemin actuel, donc .
0
Oui je l'avait déja fait le * dans le for ;)

Oui , merci de l'info pour le chemin actuel ;)
0
Ah , aussi , comment doit je faire si l'utilisateur veut changer de disque , par exemple , il est dans C: et il veut faire la liste des films dans D:
0