[batch]script pour extraire les txd par lot

Bonjours, j’ai des fichiers .txd (sorte d’archive) qui contiennent chacunes une ou plusieur images .tga.
J’ai aussi un logiciel qui permet d’ouvrir et d’extraire ces archives: TXD Workshop

Le pitch, c’est que je doit extraire plus de 2700 .txd !
Alors j’ai décidé d’ecrire un petit script batch qui va se charger de faire le boulot, voici d’abord, une partie de l’aide de txd wokshop:

en gros, la ligne qui m’intéresse c’est:
txdworkshop /extract <in_file>

Voila, maitenant on va pouvoir attaquer

Voici mon algo :

Se placer dans le dossier ou il y a tous les *.txd
Pour chaque fichier txd
Extraire le contenu de *.txd

L’algo est bon ou pas ?

Si il est bon, voila comment j’ecrit ca :

Ca ne marche pas, normalement, je devrais avoir autant de dossier que d’archive txd dans mon repertoire text export2, des dossiers portant le même nom que leur txd respectif, et contenant les images .tga « décompressé »

Voila, si quelqu’un pouvait me dire ce qui ne va pas

Merci d’avoir lu jusqu’ici, et merci de votre aide.

Si dans ton fichier bat tu as une ligne @echo off tu la commentes.
Ensuite tu lances et tu nous dis ce que tu as comme message d’erreur

en fait mon fichier bat ne contient que ca:

Pour que vous aider a m’aider :wink: voici une adresse ou vous pouvez telecharger TXD Workshop:
TXD Workshop

J’ai aussi mis ca sur mon ftp, il contient quelques txd + TXD Workshop:
demo

Je precise que ne n’ai pas de message d’erreur, simplement il ne se passe rien, les .tga ne sont pas exportés vers des sous dossiers…

Je crois que c’est normal qu’il ne donne rien
essaie sans les parenthèses autour du contenu du DO

oui c’est ca le probléme, j’ai crée ca avec notepad++, et il me colore le mot txdworkshop, mais pas ce qui suit (/extract…)

Une fois la condition de la boucle for remplie, ce qu’il faut executer c’est ca:

txdworkshop /extract "C:\Documents and Settings\HP_Propriétaire\Bureau\text export txd2\%%f"

en entier, mais je ne sais pas quel caractére on utilise pour ca en batch, en C ou en PHP ca serait des parenthéses…

j’ai deja essayé () [] “” <> mais rien du tout…

Normalement, on ne met rien, sauf les guillemets autour des noms de répertoire/fichier comme tu l’as fait

je viens de faire un essai rapide sur un repertoire de test (en remplaçant txdworkshop /extract par copy /b) : il accepte bien la syntaxe telle que tu l’as écrite :

txdworkshop /extract "C:\Documents and Settings\HP_Propriétaire\Bureau\text export txd2\%%f"

J’ai solutionné une partie du probléme en placant un pause a la fin, pour lire ce que chacune des commande avait retourné.

Deja, le cd “…” du début échoué, il n’arrive pas a accéder a HP_Porpriétaire

Ca c’est réglé, étant donné que mon .bat est sur le bureau et que mon dossier test export aussi, j’ai fait un cd “text export txd2”

ce dossier contient 3 txd, ce qui me permet de vérifier que la boucle for fonctionne
Ca marche, 3 boucle, mais a chaque boucle, j’ai un son windows genre erreur qui retenti !

Voici le résultat de l’execution du script:

Bon, j’ai trouvé, en fait le probléme du cd “HP_Propriétaire” m’as mis la puce a l’oreil
Il aime pas les accents ms dos
J’ai déplacé le dossier text export txd2 dans C:

voici mon script:

Ca fonctionne impec

Je reviendrais peut étre pour la seconde phase de l’extraction: la suppression de tous les sous dossiers…

Merci pour tes reponses en tout cas

Il aime pas les accents ms dos
J’en étais au meme point ; effectivement, il faut “corriger” le script à l’aide de la commande EDIT du DOS pour avoir les bonnes valeurs de caractères étendus en ASCII

J’ai déplacé le dossier text export txd2 dans C:
tu aurais pu utiliser un lecteur virtuel (commande subst du DOS) ca évite de surcharger la racine de C:

Ok, merce de ces conseils.

J’ai exécuté mon script en entier, pour les 2700 txd
maintenant, j’ai 2700 sous dossiers dans mon repertoire “text export txd2” qui contiennent chacun ce que leur archive txd respective contenait.

Je voudrais déplacer le contenue de chaque sous dossier directement dans le dossier "text export txd2", pour ensuite supprimer (ca je le ferais manuellement) tous les sous dossiers vides.

Il y a la commande MOVE, voici l’aglo que j’ai prevu:

Seulement je ne vois pas du tout comment écrire ca en batch, deja les dossiers n’ont pas d’extension, et il faut bien que je fasse le tri dans la condition de ma boucle for.
Ensuite je pourrais faire un MOVE pour chacun des .tga…

Quelqu’un pourrait écrire ce script, enfin la boucle for…

Merci

Sachant que la boucle For n’est pas récursive
Sachant que ce n’est pas la totalité de tes sous dossiers que tu veux déplacer
Ca me paraît assez compliqué en DOS

Par contre, en VBS, ca ne devrait pas poser de problème

Tout bien réfléchi, ca devrait pouvoir se faire aussi en DOS
essaie ce fichier .bat dans ton répertoire cible

@echo off
for /R %%I in (*.tga) do echo copy %%I %%~nI%%~xI
pause

Si ce qu’il affiche te satisfait, tu retires le echo
Une fois les copies faites, tu n’auras plus qu’à supprimer les sources.

J’ai essayé ton script, mais ca ne fonctionne pas
J’ai placé un échantillon sur mon ftp, avec 10 dossiers + ton script:
test_copie.zip

Pour le VB script sinon, ca serait quoi le code source? et ca ce compile avec quoi (VB6 suffit?)
Parce que je ne m’y connait pas vraiment en programmation, a part php.
Je connais un peut le C et presque pas le VB

Si, si, ca marche, à ceci près qu’il faut que tu rajoutes des guillemets pour délimiter les arguments
Par contre, il manque des fichiers dans la cible. Sans doute des doublons de noms mais je n’arrive pas à les trouver pour le moment

Le compte est bon
tu as 4 fichiers qui manquent
banding9_64HV.tga
girder2_grey_64HV.tga (2 fois)
washapartwall1_256.tga
ws_carparkwall2.tga

@echo off
for /R %%I in (*.tga) do copy "%%I" "%%~nI%%~xI"
pause

Ca y est ca marche, avec ce script:

Et c’est un déplacement plutot qu’un copie, ca economise de l’espace même si c’est temporaire

Merci pour toutes les reponses a ce topic, et voici mon topic "complémentaire", pour ceux qui se demandent a quoi tout ca peut bien servir:
bidouille GTA et 3D Studio Max