0

J'ai un répertoire dans lequel je souhaite afficher les noms des sous-dossiers (ex: "dossier_1" "dossier2" "dossier 3") entre guillemets simples et suivi d'une virgule , dans un fichier txt.sortie du répertoire de traitement par lots, y compris la concaténation dans un fichier txt

Basé au large de la solution @How to concatenate strings in a Windows batch file? j'ai réussi à trouver le fichier batch ci-dessous:

@echo off 
set myvar=' 
for /f %%i in ('dir /b /o:n /ad') DO call :concat %%i 
echo %myvar% >>test.txt 
goto :eof 

:concat 
set myvar=%myvar%%1', 
goto :eof 

qui produit un fichier txt contenant la sortie:

'folder_1', folder2', folder', 

Comment puis-je obtenir la sortie pour ressembler plus à ceci:

'folder_1', 
'folder2', 
'folder 3' 

--Pour chaque nom de sous-dossier (incl espace (s)) entre guillemets simples suivi d'une virgule. Si possible, j'aimerais aussi chaque dossier sur une ligne séparée et aucune virgule sur le dernier dossier.

Répondre

1

Pour gérer les caractères manquants, il vous manque une chose dans votre instruction for.

for /f "tokens=*" %%i in ('dir /b /o:n /ad') DO call :concat %%i 

La partie "tokens=*" dit for pour traiter toute la ligne comme une variable. Par défaut, for sépare chaque ligne en variables séparées sur les espaces, ce qui vous oblige à obtenir uniquement le premier mot de chaque ligne

Pour résoudre le problème de ligne unique, vous devez émettre plusieurs instructions echo. À l'heure actuelle, votre code collecte tout en une seule variable et en fait l'écho en une seule ligne. Au lieu de cela, vous pouvez ajouter une ligne au fichier à chaque fois dans la boucle, en déplaçant l'écho dans votre sous-programme :concat.

for /f "tokens=*" %%i in ('dir /b /o:n /ad') DO call :concat %%i 
goto :eof 

:concat 
echo '%*', >>test.txt 
goto :eof 

Dans la ligne echo, %* signifie "tous les arguments". Vous ne pouvez pas utiliser %1 ici car, encore une fois, CMD divise les arguments sur les espaces. Pour en savoir plus sur les arguments CMD, voir http://ss64.com/nt/syntax-args.html

Une autre façon de préserver les espaces consiste à placer des guillemets autour de la variable dans call :concat "%%i", ce qui empêche CMD de diviser l'argument. Dans la sous-fonction, vous utilisez ensuite %~1 au lieu de %*.

+0

Merci! Je n'ai plus besoin du 'set myvar = '' right? De plus, savez-vous quel est le but de '%% i' et quel est le pourcentage dans' echo '% *', '? – Eats