2015-01-28 11 views
5

Utworzono niestandardowe rozszerzenie pliku, które zostałoby skojarzone ze skryptem wsadowym. użyłemWindows: ustanów powiązanie plików z plikiem wsadowym

ASSOC .myext=MY.FILETYPE 
FTYPE MY.FILETYPE=cmd /c "C:\Path\of\my\batch.bat" %1 %* 

teraz plik wsadowy "C: \ ścieżka \ z \ Moje \ batch.bat" jest prosta-liner

echo %1 

I mniej więcej działa: dwukrotne kliknięcie. Plik myext powoduje wyświetlenie powłoki cmd odtwarzającej ścieżkę pliku.
Ale problem powstaje, gdy plik .myext znajduje się w ścieżce zawierającej spacje: echoed ścieżka pliku jest obcięta do spacji.
Podwójne cytowanie% 1 w instrukcji FTYPE wydaje się nie działać.

FTYPE MY.FILETYPE=cmd /c "C:\Path\of\my\batch.bat" "%1" %* 
+0

czy dzwonisz 'FTYPE MY.FILETYPE = cmd/c" C: \ Ścieżka \ z \ my \ batch.bat ""% 1 "% *' z pliku nietoperza? – npocmaka

Odpowiedz

5

dwukrotnie podając %1 jednoczesnego rrect, ale nie powiedzie się, ponieważ cmd.exe zawiera błąd, gdy polecenie i co najmniej jeden parametr zawiera cytaty.
Musisz więc wykonać polecenie bez cudzysłowu, wstawiając CALL.

FTYPE MY.FILETYPE=cmd /c call "C:\Path\of\my\batch.bat" "%1" %* 
+1

Dzięki Jeb! Twoje rozwiązanie działa, ale myślę, że powinno być bez tyldy: FTYPE MY.FILETYPE = cmd/c wywołanie "C: \ Path \ of \ my \ batch.bat" "% 1"% * –

+1

@FedericoDestefanis tylda służy do usuwania cytatów od% 1, należy to zrobić tak, aby zawsze była tylko jedna para cytatów po dodaniu ich z '"% ~ 1 "'. w przeciwnym razie możesz uzyskać coś w rodzaju '" "C: \ z spacją \ xyz" "' – jeb

+0

@FedericoDestefanis Myliłem się! W FTYPE '% ~ 1' nie działa jak w pliku wsadowym, nie będzie się rozszerzał. – jeb

1

jeśli używasz tego z pliku bat starają się go zmienić na:

ASSOC .myext=MY.FILETYPE 
FTYPE MY.FILETYPE=cmd /c "C:\Path\of\my\batch.bat" "%%1" %%* 

myślę nawet

FTYPE MY.FILETYPE="C:\Path\of\my\batch.bat" "%%1" %%* 

powinno działać.

2

zmienić plik wsadowy "C:\Path\of\my\batch.bat" treści

echo %* 

Twoje ASSOC i FTYPE wypowiedzi wydają się być w porządku.

Edytuj zgodnie z Monacraft - komentarz.

To rozwiązanie jest prawidłowe %1 będzie odwoływać się dokument pliku natomiast %* będzie odwoływać się do kolejnych parametrów: Jeśli jakiekolwiek dalsze parametry są wymagane przez aplikację mogą być przekazywane jako%2, %3. Aby przekazać wszystkie parametry do aplikacji, użyj%*.

Handy za korzystanie aFile.myext a b c bezpośrednio z linii poleceń, chociaż do tego użyć instrukcji FTYPE powinny być

ftype MY.FILETYPE = cmd/D/C „C: \ ścieżka \ z \ Moje \ partię. bat "% 1" "% *

do rozróżnienia pierwszego parametru, jeśli zawiera spacje.

Przykład: z

ASSOC .xxx=XXXFILE 
rem a bug here FTYPE XXXFILE=%ComSpec% /D /C "d:\bat\xxxbatch.bat "%1"" %* 
rem definitely switched to Jeb's solution as follows 
FTYPE XXXFILE=%comspec% /D /C call "d:\bat\xxxbatch.bat" "%1" %* 

i xxxbatch.bat następująco

@echo(
@echo %* 
@if "%2"=="" pause 
@goto :eof 

wyjściowy:

d:\bat>D:\test\xxxFileNoSpaces.xxx aa bb cc 

"D:\test\xxxFileNoSpaces.xxx" aa bb cc 

d:\bat>"D:\test\xxx file with spaces.xxx" dd ee 

"D:\test\xxx file with spaces.xxx" dd ee 

d:\bat> 
+0

@Monacraft Nope. To rozwiązanie jest poprawne, zobacz moją edycję – JosefZ

+0

Przynajmniej na Win7 nie możesz uruchomić swojego 'test.xxx', otrzymuję' Składnia twojej nazwy pliku, katalogu lub napędu jest nieprawidłowa'. Głównym problemem jest "cmd/c" batch.bat ""% 1 "' – jeb

+1

@jeb :) przeczytaj ponownie i dokładnie sprawdź: 'cmd/c" batch.bat "% 1" "' zamiast zła 'cmd/c "batch.bat" "% 1" '. Zwróć uwagę na położenie spacji i '' 'cytatów ... Przynajmniej na Win8 ... :) – JosefZ

Powiązane problemy