Mam następujący skrypt wsadowy z Wikipedii:
@echo off
for /R "C:\Users\Admin\Ordner" %%f in (*.flv) do (
echo %%f
)
pause
W pętli for wszystkie pliki z rozszerzeniem flv są powtarzane, ale chcę, aby wykonać pewne działania z plikiem (plikami), w których potrzebuję raz pliku bez rozszerzenia i raz z rozszerzeniem. Jak mogłem dostać te dwa?
Szukałem rozwiązań, ale nie znalazłem. Jestem prawdziwym nowicjuszem w partii ...
file
batch-file
Poru
źródło
źródło
C:\Users\Admin\Ordner\foo.flv
a %% ~ nf dałoby cifoo
. Jeśli chcesz wszystko oprócz rozszerzenia, użyj %% ~ df %% ~ pf %% ~ nf, co by ci dałoC:\Users\Admin\Ordner\foo
%%~dpnf
byłoby krótszą alternatywą.%1
w skrypcie wsadowym.echo %~n1
było to, czego szukałem.W przypadku, gdy plik, który zawiera zmienna, w rzeczywistości nie istnieje,
FOR
podejście nie zadziała. Jedną sztuczką, której możesz użyć, jeśli znasz długość rozszerzenia, jest pobranie podciągu:to
-4
oznacza, że ostatnie 4 cyfry (przypuszczalnie .ext ) zostaną obcięte.źródło
echo %f:~0,-4%
w kontekście przykładu użytego w pytaniu. Co ja robię źle?SET fl=%%f
a następnieecho %fl:~0,-4%
Nie znam też Windows cmd, ale spróbuj tego:
źródło
To jest naprawdę późna odpowiedź, ale wymyśliłem to, aby rozwiązać konkretny problem, który miałem z DiskInternals LinuxReader dołączającym `` .efs_ntfs '' do plików, które zapisał w katalogach innych niż NTFS (FAT32):
źródło
.encrypted
dodał do wszystkich swoich plików wraz z żądaniem okupu. Najwyraźniej atakujący skrypt musiał być plikiem wsadowym, który jest odwrotnością tego i dodany.encrypted
do wszystkich plików.Używam tego, jeśli chcę po prostu usunąć rozszerzenie ze zmiennej (bez zapętlania żadnych katalogów lub istniejących plików):
Jeśli chcesz usunąć rozszerzenie z pełnej ścieżki, użyj
%%dpnf
zamiast tego:Przykład:
(Użyj bezpośrednio w konsoli)
źródło
Używanie cygwin bash do robienia siekania
źródło
Jeśli zmienna jest argumentem, możesz po prostu użyć,
%~dpn
po której następuje numer argumentu, więc nie musisz się martwić o różne długości rozszerzeń.Na przykład
%~dpn0
zwróci ścieżkę do pliku wsadowego bez rozszerzenia,%~dpn1
będzie%1
bez rozszerzenia itp.źródło