Przekierowanie nazwy plików ze ścieżką bez cudzysłów z poleceniem DIR do Notepad ++ nie działa, ponieważ Notepad ++ to aplikacja GUI, który nie czyta w nazwach plików ze standardowego strumienia wejściowego STDIN linia po linii .
Notatnik ++ oczekuje, że rozdzielona spacjami lista (podwójnie cytowanych) nazw plików będzie parametrem (-ami) wiersza polecenia, przy czym podwójne cudzysłowy wokół nazwy pliku bez ścieżki, ścieżki względnej lub ścieżki bezwzględnej nie są zawsze potrzebne w zależności od znaków w nazwie pliku i ścieżce pliku.
Moja pierwsza propozycja to:
@echo off
setlocal EnableExtensions EnableDelayedExpansion
set "Files="
for /F "delims=" %%I in ('dir zed.txt /A-D /B /S 2^>nul') do set "Files=!Files! "%%I""
if not "!Files!" == "" notepad++.exe%Files%
endlocal
Ten kod partii Łączy odnaleziono plików do długiej listy parametrów wychodząc zawsze z miejsca i zaczyna Notepad ++ z tej listy.
Problem z tym prostym kodem polega na tym, że długość listy parametrów może przekraczać maksymalną długość ciągu zmiennej środowiskowej, jeśli istnieje naprawdę wiele plików o nazwie pliku zed.txt
.
Prostym rozwiązaniem byłoby ograniczenie liczby plików na Notepad ++ biegu na przykład do 25.
@echo off
setlocal EnableExtensions EnableDelayedExpansion
set "Files="
set "FileCount=0"
for /F "delims=" %%I in ('dir zed.txt /A-D /B /S 2^>nul') do (
set "Files=!Files! "%%I""
set /A FileCount+=1
if !FileCount! == 25 (
notepad++.exe!Files!
set "Files="
set "FileCount=0"
)
)
if not %FileCount% == 0 notepad++.exe%Files%
endlocal
Najlepszym rozwiązaniem byłoby sprawdzić na każdej pętli uruchomić aktualną długość zmiennej środowiskowej przed dodaniem następnej nazwy pliku. Ale to spowodowałoby, że plik wsadowy wolniej i zazwyczaj nazwy plików ze ścieżką nie są tak długie, że 25 plików na wykonanie jest naprawdę problemem.
Cóż, teoretycznie pojedyncza nazwa pliku ze ścieżką może być już zbyt długa, aby można ją było przypisać do zmiennej środowiskowej.
Uwaga: Jeżeli wykonanie pliku wsadowego zostanie wstrzymane po rozpoczęciu Notepad ++ i takie zachowanie nie jest poszukiwany, włóż lewej do każdego Notepad++.exe
ciąg start ""
zacząć Notepad ++ w oddzielnym procesie z pustym tytułowego napisu. Nie pomijaj ""
po komendzie START przed Notepad++.exe
ponieważ w przeciwnym razie pierwszy podwójny cudzysłów (= pierwsza nazwa pliku ze ścieżką) zostanie zinterpretowany jako ciąg znaków.
Aby poznać używane polecenia i ich działanie, otwórz okno wiersza polecenia, wykonaj poniższe polecenia i przeczytaj uważnie wszystkie strony pomocy wyświetlane dla każdego polecenia.
dir /?
echo /?
endlocal /?
for /?
if /?
set /?
setlocal /?
start /?
Zobacz także artykuł o firmie Microsoft o numerze Using command redirection operators, aby uzyskać wyjaśnienie: 2>nul
. Operator przekierowania >
jest tutaj uciekł z ^
zastosować przekierowanie STDERR do urządzenia NUL na wykonanie polecenia DIR. To przekierowanie służy do tłumienia komunikatu o błędzie wyjścia komendą: DIR, jeśli nie można znaleźć żadnego zed.txt
w bieżącym katalogu lub żadnym podkatalogu.
Spowoduje to niepowodzenie w nazwach plików ze spacjami. Musisz również dodać opcję/S do rekursywnego wyszukiwania. – Squashman
Czy istnieje poprawka do polecenia do pracy ze spacjami w nazwach plików, które znasz z góry? – TheRealKernel
Dziękuję za edycję @Squashman, przetestowałem go ze spacjami w nazwie pliku i zadziałało to dla mnie. – TheRealKernel