J'ai un certain nombre de fichiers avec le même schéma de dénomination. Par exemple, quatre fichiers sont appelés "num_001_001.txt", "num_002_001.txt", "num_002_002.txt", "num_002_003.txt"
La première série de chiffres représente le "paquet" dont il provient, et la deuxième série de chiffres sert simplement à les distinguer les uns des autres. Dans cet exemple, nous avons donc un fichier dans le paquet 001 et trois fichiers dans le paquet 002.
Je suis en train d'écrire une commande batch pour Windows Vista afin de prendre tous les fichiers et de les déplacer dans leurs propres répertoires, où chaque répertoire représente un paquet différent. Je veux donc déplacer tous les fichiers du paquet 001 dans le répertoire "001" et tous ceux du paquet 002 dans le répertoire "002"
J'ai réussi à écrire un script qui va itérer sur tous les fichiers txt et les afficher en écho. J'ai également écrit un script qui déplacera un fichier dans un autre emplacement, et qui créera le répertoire s'il n'existe pas.
Je me suis rendu compte que je devais utiliser des sous-chaînes, et j'ai donc utilisé la syntaxe %var:~start,end% pour les obtenir. En guise de test, j'ai écrit ceci pour vérifier que je peux effectivement extraire la sous-chaîne et créer un répertoire de manière conditionnelle
@echo off
set temp=num\_001\_001.txt
NOT IF exist %temp:~0,7%\\
mkdir %temp:~0,7%
Et cela fonctionne. C'est très bien.
J'y ai donc ajouté la boucle for.
@echo off
FOR /R %%X IN (\*.txt) DO (
set temp=%%~nX
echo directory %temp:~0,7%
)
Mais il s'agit de mon résultat :
directory num\_002
directory num\_002
directory num\_002
directory num\_002
Qu'est-ce qui ne va pas ? Est-ce que Vista ne permet pas de réaffecter les variables à chaque itération ? Les quatre fichiers sont dans mon répertoire, et l'un d'entre eux devrait créer num_001. J'ai mis différents fichiers avec 003 004 005 et tout était le nom du dernier paquet. Je suppose que quelque chose ne va pas dans la façon dont je configure les choses.
J'ai trouvé différentes solutions pour faire le travail, mais je ne comprends pas pourquoi un concept aussi simple ne fonctionne pas.