Logo du forum
 

Forum TTH-News

| Inscription | | Recherche | | FAQ | | Accueil | | Liste des membres |
| Calendrier |
 
Vous n'êtes pas identifié! [Connexion] ou [Inscription] Forum » Programmation » [BATCH] Variable nom de fichier avec espace
Login Mot de passe

2 visiteurs sur ce topic (0 membre(s), 2 invité(s) )


Auteur
Sujet : [BATCH] Variable nom de fichier avec espace
Greg 'o riz
Master
Membre # 15734

 Avatar du membre
Lieu : 4 20 5

Messages :
432 (0.08 par jour)




Message du 10-11-2010 @ 17:27      Afficher le profil   Envoyer un message privé   Editer le message   Citer le message      Afficher l'adresse IP   Alerter les modérateurs   


Bonjour,
alors je voudrais faire un petit script pour créer un dossier en fonction d'un nom de fichier et ensuite déplacer le fichier en question dans le répertoire portant son petit nom

voici le script :

Code :

for /f %%I in ('dir /b C:\data\') do (call :extr %%I )
goto :fin
:extr
set chn=%1
set extrn=%chn:~0,-4%
echo %extrn%
mkdir C:\data\%extrn%
move C:\data\%chn% C:\data\%extrn%
:fin



jusque la ça fonctionne super bien, le hic c'est quand j'ai des fichiers avec des espaces, la je bloque

des idées ?
----------
Et mon cul c'est du poulet - Bender
- Haut de page -
B2000
Administrateur
Membre # 185

 Avatar du membre
Lieu : France/Poitiers/juste à côté...

Messages :
9760 (1.4 par jour)




Message du 10-11-2010 @ 19:33   Afficher le profil   Envoyer un message privé   Editer le message   Citer le message      Afficher l'adresse IP   Alerter les modérateurs   

il faut mettre des guillemets avant et apres le nom de fichier pour le délimiter correctement
Code :


for /f %%I in ('dir /b C:\data\') do (call :extr %%I )
goto :fin
:extr
set chn=%1
set extrn=%chn:~0,-4%
echo %extrn%
mkdir "C:\data\%extrn%"
move "C:\data\%chn%" "C:\data\%extrn%"
:fin


----------
Intel i5 8600K | Noctua NH-U14S | Asus Prime Z370-P | Ballistix Sport LT 2x 16Go DDR4-2666MHz | PNY GeForce GTX 1060 XLR8 OC 6 Go | SAMSUNG 970 Pro 512Go | SAMSUNG 840 Pro 256Go | 2x Western Digital WD Blue 1To | Sony AD-7280S | Corsair STRAFE RGB | Roccat Kova | SteelSeries QcK XXL (900x400x4mm) | Corsair Gaming Void USB | HP Omen 25 | iiyama ProLite E2472HDD | Cooler Master Silencio 550
Ryzen 7 1800x | Noctua NH-U12S | MSI X370 Gaming Pro Carbon | Ballistix Sport LT 2x 8Go DDR4-2666MHz | MSI GeForce GTX 1060 3Go | SAMSUNG 960 Pro 512Go | SAMSUNG 840 Pro 512Go | 2x Western Digital WD Blue 1To | Lenovo Ultraslim sans fil | Logitech MX Anywhere 2 | SteelSeries QcK (320x270x2mm) | LG 34um95 3440x1440 34" | 2x SAMSUNG SyncMaster SA450 1920x1200 24" | Cooler Master Silencio 550
Lenovo T430s : i5 3320m | 2x8Go | Toshiba 120Go | station Mini Dock serie 3
Nexus 6 64Go Android 7.1.1 | Garmin Forerunner 720XT | Nikon COOLPIX S9200 + Transcend SDHC 8GB | Canon PIXMA IP4850 | ADSL Freebox Révolution
Pour dialoguer en live, le chat TTH ou par mIRC sur irc://porsche.webchat.org:6667/tt-hardware
Rejoignez la team EBuyClub TTH !!!
Un jour j'ai mangé une pomme...
- Haut de page -
Greg 'o riz
Master
Membre # 15734

 Avatar du membre
Lieu : 4 20 5

Messages :
432 (0.08 par jour)




Message du 10-11-2010 @ 21:38   Site personnel   Afficher le profil   Envoyer un message privé   Editer le message   Citer le message      Afficher l'adresse IP   Alerter les modérateurs   

merci, mais je n'arrive pas justement à savoir ou mettre les guillemets.
----------
Et mon cul c'est du poulet - Bender
- Haut de page -
regall
Membre actif
Membre # 32607

 Avatar du membre
Lieu : Paris

Messages :
62 (0.02 par jour)


Voter pour ce membre

Message du 11-11-2010 @ 0:33   Afficher le profil   Envoyer un message privé   Editer le message   Citer le message      Afficher l'adresse IP   Alerter les modérateurs   

regardes bien le code que B2000 a quoté et modifié ...

- Haut de page -
Greg 'o riz
Master
Membre # 15734

 Avatar du membre
Lieu : 4 20 5

Messages :
432 (0.08 par jour)




Message du 11-11-2010 @ 12:09   Site personnel   Afficher le profil   Envoyer un message privé   Editer le message   Citer le message      Afficher l'adresse IP   Alerter les modérateurs   

Oups j'avais regardé en diagonale :(
Enfin ça ne fonctionne pas pour autant car il faudrait mettre les guillemets sur la variable %1
----------
Et mon cul c'est du poulet - Bender
- Haut de page -
B2000
Administrateur
Membre # 185

 Avatar du membre
Lieu : France/Poitiers/juste à côté...

Messages :
9760 (1.4 par jour)




Message du 11-11-2010 @ 19:21   Afficher le profil   Envoyer un message privé   Editer le message   Citer le message      Afficher l'adresse IP   Alerter les modérateurs   

nouvelle version qui fonctionne :
Code :


@ECHO OFF
FOR /F "tokens=*" %%I IN ('DIR /B /A-D C:\DATA\') do ( CALL :extr "%%I" )
GOTO :fin

:extr
SET chn=%1
SET chn=%chn:~1,-1%
ECHO nom fichier : %chn%
SET extrn=%chn:~0,-4%
ECHO nom dossier : %extrn%
MKDIR "C:\data\%extrn%"
MOVE "C:\DATA\%chn%" "C:\DATA\%extrn%"
ECHO.
:fin



le problème venait du fait que la boucle FOR utilise l'espace et la tabulation comme délimiteurs par défaut et du coup découpe chaque occurence trouvée à l'aide de ces délimiteurs...
2 solutions :
- soit changer de délimiteurs, mais lequel ?
- soit demander à la boucle FOR de tout envoyer d'un seul coup

extrait de l'aide en ligne de la commande FOR :
Code :


delims=xxx - spécifie un ensemble de délimiteurs. Ceci remplace l'ensemble de délimiteurs par défaut qui sont l'espace et la tabulation.

tokens=x,y,m-n - spécifie les parties de chaque ligne devant être transmises au corps de FOR à chaque itération. Ceci provoquera l'allocation de noms de variables supplémentaires. La forme m-n est une étendue spécifiant les parties allant de m à n. Si le dernier caractère de la chaîne tokens= est une astérisque, alors une variable supplémentaire est allouée et reçoit le texte restant dans la ligne suivant la dernière partie analysée.



le deuxième choix est tout à fait possible en utilisant l'option "tokens=*"
par contre il faut bien mettre des guillemets autour de %%I lors du CALL sinon ça ne passera pas l'intégralité de la chaîne (limite liée à l'interprêteur de commande qui utilise aussi l'espace comme délimiteur/séparateur)

contrepartie de la réussite du passage de paramètre sans perte, le paramètre %1 se retrouve chargé de guillemets au début et à la fin... nettoyage de ces parasites avec l'ajout de la ligne de commande SET chn=%chn:~1,-1%

j'ai rajouté un peu d'affichage pour le suivi et un saut de ligne après chaque action pour la lisibilité
j'ai aussi rajouté du filtrage sur la commande DIR qui est dans la boucle FOR afin de ne pas lister les dossiers qui se trouve dans "C:\DATA" sinon cela créé un nouveau dossier et déplace l'autre dedans... (DIR /B /A-D)

extrait de l'aide en ligne de la commande DIR :
Code :


/A Affiche les fichiers dotés des attributs spécifiés.
attributs :
D Répertoires
R Lecture seule
H Caché
A Archive
S Système
- Préfixe de négation



je pense avoir fait le tour de la question...
----------
Intel i5 8600K | Noctua NH-U14S | Asus Prime Z370-P | Ballistix Sport LT 2x 16Go DDR4-2666MHz | PNY GeForce GTX 1060 XLR8 OC 6 Go | SAMSUNG 970 Pro 512Go | SAMSUNG 840 Pro 256Go | 2x Western Digital WD Blue 1To | Sony AD-7280S | Corsair STRAFE RGB | Roccat Kova | SteelSeries QcK XXL (900x400x4mm) | Corsair Gaming Void USB | HP Omen 25 | iiyama ProLite E2472HDD | Cooler Master Silencio 550
Ryzen 7 1800x | Noctua NH-U12S | MSI X370 Gaming Pro Carbon | Ballistix Sport LT 2x 8Go DDR4-2666MHz | MSI GeForce GTX 1060 3Go | SAMSUNG 960 Pro 512Go | SAMSUNG 840 Pro 512Go | 2x Western Digital WD Blue 1To | Lenovo Ultraslim sans fil | Logitech MX Anywhere 2 | SteelSeries QcK (320x270x2mm) | LG 34um95 3440x1440 34" | 2x SAMSUNG SyncMaster SA450 1920x1200 24" | Cooler Master Silencio 550
Lenovo T430s : i5 3320m | 2x8Go | Toshiba 120Go | station Mini Dock serie 3
Nexus 6 64Go Android 7.1.1 | Garmin Forerunner 720XT | Nikon COOLPIX S9200 + Transcend SDHC 8GB | Canon PIXMA IP4850 | ADSL Freebox Révolution
Pour dialoguer en live, le chat TTH ou par mIRC sur irc://porsche.webchat.org:6667/tt-hardware
Rejoignez la team EBuyClub TTH !!!
Un jour j'ai mangé une pomme...
- Haut de page -
Greg 'o riz
Master
Membre # 15734

 Avatar du membre
Lieu : 4 20 5

Messages :
432 (0.08 par jour)




Message du 11-11-2010 @ 20:58   Site personnel   Afficher le profil   Envoyer un message privé   Editer le message   Citer le message      Afficher l'adresse IP   Alerter les modérateurs   

Merci ;)
----------
Et mon cul c'est du poulet - Bender
- Haut de page -


Aller dans le forum :  

Plan du forum | Contacter l'administrateur

Powered by SoulBB 3.0.1
© Soulmanto, 2003-2010

Valid XHTML 1.0 Transitional

Page générée en 0.029 secondes