Zmienna umożliwiająca uzyskanie bezwzględnej ścieżki w skrypcie wsadowym systemu Windows


9

Mam następujący skrypt, aby wyświetlić wszystkie pliki, rekurencyjnie z katalogu, z .phtmlrozszerzeniem.

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

Wymienia tylko względną ścieżkę do plików. Powyższy skrypt działa z pośredniej lokalizacji, więc nie otrzymuję pełnych ścieżek w @relpathzmiennej.

Otrzymuję również cytaty w wierszach wyników, które chcę usunąć.

Chcę uzyskać bezwzględną ścieżkę do tych plików z kilkoma zmianami kodu, jak to możliwe, jeśli dostępna jest zmienna globalna, której można użyć w moim kodzie, to jest to dla mnie najlepsze, ponieważ nie jestem wielkim scripterem systemu Windows.

Odpowiedzi:


3

Nie otrzymuję pełnych ścieżek w @relpathzmiennej.

również otrzymuję cytaty w wierszach wyników, które chcę usunąć.

Poniższy plik wsadowy robi to, co chcesz:

@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

Uwagi:

  • Używa @path(Pełna ścieżka do pliku) zamiast @relpath(Ścieżka względna pliku).
  • Używa substringwyrażenia zmiennego do usuwania cudzysłowów ( :~1,-1usuwa pierwszy i ostatni znak ze ciągu zmiennej).
  • Używa setlocal EnableDelayedExpansion, aby zmienne były poprawnie aktualizowane w forpętli.

Dalsza lektura

  • Indeks AZ wiersza polecenia systemu Windows CMD - doskonałe odniesienie do wszystkich rzeczy związanych z wierszem cmd systemu Windows.
  • enabledelayedexpansion - Opóźnione rozszerzenie spowoduje, że zmienne zostaną rozszerzone w czasie wykonywania, a nie w czasie analizy.
  • for / f - Polecenie zapętlone względem wyników innego polecenia.
  • forfiles - Wybierz plik (lub zestaw plików) i wykonaj polecenie dla każdego pliku. Przetwarzanie wsadowe.
  • zmienne - Wyodrębnij część zmiennej (podciąg).
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.