J'ai un ensemble de noms de fichiers de base, pour chaque nom «f», il y a exactement deux fichiers, «f.in» et «f.out». Je veux écrire un fichier batch (sous Windows XP) qui passe par tous les noms de fichiers, pour chacun il doit:
- Afficher le nom de base «f»
- Effectuer une action sur 'f.in'
- Effectuez une autre action sur 'f.out'
Je n'ai aucun moyen de lister l'ensemble des noms de fichiers de base, sauf pour rechercher * .in (ou * .out) par exemple.
command-line
windows-xp
batch-file
Luke Halliwell
la source
la source
Réponses:
En supposant que vous ayez deux programmes qui traitent les deux fichiers, process_in.exe et process_out.exe:
%% ~ nf est un modificateur de substitution, qui étend% f à un nom de fichier uniquement. Voir d'autres modificateurs dans https://technet.microsoft.com/en-us/library/bb490909.aspx (au milieu de la page) ou juste dans la réponse suivante.
la source
%%f
pourquoi est-elle%%~nf
plus tard?~
modificateurs pour faire des choses, comme dans mon exemple, il suffit d'obtenir le nom de fichier. C'est juste une habitude pour moi de l'utiliser au cas où le*
chemin complet ou quelque chose. Il existe une poignée de ces modificateurs (au milieu de la page): microsoft.com/resources/documentation/windows/xp/all/proddocs/…Vous pouvez utiliser cette ligne pour imprimer le contenu de votre bureau:
Une fois que vous avez la
%%I
variable, il est facile d'exécuter une commande dessus (remplacez simplement le mot echo par votre programme)De plus, la substitution des références de variable FOR a été améliorée. Vous pouvez désormais utiliser la syntaxe facultative suivante:
https://ss64.com/nt/syntax-args.html
Dans les exemples ci-dessus
%I
, PATH peut être remplacé par d'autres valeurs valides. La%~
syntaxe se termine par un nom de variable FOR valide. Choisir des noms de variables majuscules comme le%I
rend plus lisible et évite la confusion avec les modificateurs, qui ne sont pas sensibles à la casse.Vous pouvez obtenir la documentation complète en tapant
FOR /?
la source
%%I was unexpected at this time.
%I
plutôt au lieu de%%I
Le moyen le plus simple, selon moi, est d'utiliser une boucle for qui appelle un deuxième fichier de commandes pour le traitement, en transmettant à ce deuxième fichier le nom de base.
Selon le pour /? aide, le nom de base peut être extrait à l'aide de l'option nifty ~ n. Ainsi, le script de base se lirait:
Ensuite, dans process.cmd, supposez que% 0 contient le nom de base et agissez en conséquence. Par exemple:
Il pourrait y avoir une meilleure façon de le faire dans un script, mais j'ai toujours été un peu flou sur la façon de tirer plusieurs commandes en une seule boucle for dans un fichier batch.
EDIT: C'est fantastique! J'avais en quelque sorte manqué la page des documents qui montrait que vous pouviez faire des blocs multi-lignes dans une boucle FOR. Je vais devoir revenir en arrière et réécrire certains fichiers batch maintenant ...
la source
Expansion sur le poste de Nathans . Ce qui suit fera le lot de travaux dans un fichier de commandes.
la source
Il y a un outil habituellement utilisé dans les serveurs MS (pour autant que je m'en souvienne) appelé forfiles :
Le lien ci-dessus contient de l'aide ainsi qu'un lien vers la page de téléchargement de Microsoft.
la source
Le code ci-dessous filtre les noms de fichiers commençant par une sous-chaîne donnée. Il peut être modifié pour répondre à différents besoins en travaillant sur l'extraction de sous-chaîne de sous-nom et l'instruction IF:
la source
Faire écho à f.in et f.out séparera le concept de ce qu'il faut boucler et de ce qu'il ne faut pas boucler lorsqu'il est utilisé dans une boucle for / f.
Bien que vous ne l'ayez pas demandé, un bon moyen de passer des commandes en f.in et f.out serait de ...
Un lien vers toutes les commandes de Windows XP: lien
Je m'excuse si je n'ai pas répondu correctement à cette question. La question était très difficile à lire pour moi.
la source