Variable pour obtenir le chemin absolu dans le script batch Windows

9

J'ai le script suivant pour lister tous les fichiers, récursivement à partir d'un répertoire, ayant une .phtmlextension.

@echo off
setlocal
for /f %%G in ('forfiles /s /m *.phtml /c "cmd /c echo @relpath"') do echo %%G >> listoffiles.txt
endlocal
exit

Il répertorie uniquement le chemin d'accès relatif aux fichiers. Le script ci-dessus s'exécute à partir d'un emplacement intermédiaire, donc je ne reçois pas de chemins d'accès complets en @relpathvariable.

Je reçois également des citations dans les lignes de résultat, que je souhaite supprimer.

Je veux obtenir le chemin absolu vers ces fichiers avec quelques modifications de code possibles, si une variable globale est disponible qui peut être utilisée dans mon code, c'est le mieux pour moi, car je ne suis pas beaucoup de scripteur de lot Windows.

Vicky Dev
la source

Réponses:

3

Je n'obtiens pas de chemins complets dans la @relpathvariable.

je reçois également des citations dans les lignes de résultat, que je veux supprimer.

Le fichier de commandes suivant fait ce que vous voulez:

@echo off
setlocal enableDelayedExpansion
for /f %%G in ('forfiles /s /m *.phtml /c "cmd /c echo @path"') do (
  set _name=%%G
  rem strip the quotes
  echo !_name:~1,-1! >> listoffiles.txt
  )
endlocal
exit

Remarques:

  • Utilise @path(Chemin complet du fichier) au lieu de @relpath(Chemin relatif du fichier).
  • Utilise une substringexpression variable pour supprimer les guillemets ( :~1,-1supprime les premier et dernier caractères de la chaîne de variable).
  • Utilise setlocal EnableDelayedExpansionpour que les variables soient correctement mises à jour dans la forboucle.

Lectures complémentaires

  • Un index AZ de la ligne de commande Windows CMD - Une excellente référence pour tout ce qui concerne la ligne de commande Windows.
  • enabledelayedexpansion - L'expansion retardée entraînera l'expansion des variables au moment de l'exécution plutôt qu'au moment de l'analyse.
  • for / f - Commande en boucle par rapport aux résultats d'une autre commande.
  • forfiles - Sélectionnez un fichier (ou un ensemble de fichiers) et exécutez une commande sur chaque fichier. Le traitement par lots.
  • variables - Extraire une partie d'une variable (sous-chaîne).
DavidPostill
la source