Jak uzyskać dostęp do ścieżki folderu od pierwszego parametru wejściowego i jak wywołać pętlę IF w pliku wsadowym?

0
@Echo OFF

SET FilePath=%1

SET HeaderFilePath=%2

SET RetrunCode="0"

Call :sub %FilePath% exit /b

:sub SET FileName=%~n1


SET FilePath=%1

SET "FileType=.zip"

CALL SET "ZipType=%%FilePath:%FileType%=%%"

if "%Ext%"==".zip" (goto Function1) else Goto Function2

:Function1
 Echo  File is zipped

:Function2 
Echo File is not zipped

pause

** Mam miejsce powyżej kodu w test.bat i przeszedłem poniżej wspomnianego parametru

C: \ Users \ ak813708> C: \ Users \ abhay \ Desktop \ test1.bat
C: \ Users \ abhay \ Desktop \ doc1.zip C: \ Users \ abhay \ Desktop \ header.txt, ale niezależnie od pliku pierwszego parametru wpisz jego funkcję wywołującą2. **

abhayk
źródło
2
„jeśli przekazuję E: \ testowanie \ appserver_output.dat, to powinien wywołać funkcję 2, a jeśli przekazuję E: \ testowanie \ appserver_output.zip, powinien wywołać tylko funkcję 1” - Więc w zasadzie chcesz rozgałęzić się tylko na podstawie rozszerzenia?
Karan
Możesz uzyskać rozszerzenie pliku za pomocą %~x1- Rozwiń tylko %1do rozszerzenia eXtension
DavidPostill
@Karan: tak. ale w powyższym kodzie próbuję wywoływać funkcje na podstawie If, ​​ale nie działa.
abhayk
@DavidPostill: dzięki .. teraz jest to pełny dowód i łatwiej, ponieważ wcześniej myślałem, aby znaleźć podciąg „.zip” w FilePath
abhayk
O to cię pytałem. Jeśli jest to prosty przypadek rozgałęzienia według rozszerzenia, for /?powie ci, co robi% ~ xI.
Karan

Odpowiedzi:

1

Zachęcam więc do korzystania z %~dpoperatora zamiast samego %~poperatora. Aby uzyskać pełną listę operatorów plików i sposób ich użycia, użyj FOR /?w wierszu polecenia - jest na samym końcu sekcji.

Coś takiego jak poniżej powinno zapewnić ci bardziej przewidywalny kod, który zapewnia niewielką elastyczność w akceptowaniu nazw plików w wierszu poleceń.

@Echo OFF
SET File=%1
SET HeaderFilePath=%2
SET RetrunCode="0"
Call :sub %File%
exit /b

:sub 
SET FileName=%~n1
SET Ext=%~x1
SET PGPProcessPath=%~dp1
SET EncryptFile=%~fnx1
SET DecryptFile=%EncryptFile:_pgp=%
pause

if "%Ext%"==".zip" (goto Function1) else Goto Function2
ice13berg
źródło
Jeśli zdam E: \ abhay \ test \ output1.dat, to daje to \ abhay \ test \ zamiast E: \ abhay \ test ..
abhayk
1
Czy wprowadzenie zmian w mojej odpowiedzi nie przyniosło żadnych zmian w wynikach?
ice13berg
ice13berg: działa teraz ... dzięki ... ale nadal JEŚLI pętla daje błąd
abhayk
@abhayk Edytuj swoje pytanie, aby uwzględnić najnowszy kod, którego używasz i jaki ifbłąd otrzymujesz teraz ...
DavidPostill
@DavidPostill: Zaktualizowałem swój kod. Ale za każdym razem jego wywołanie pełni tylko funkcję 2
abhayk
1

Jak uzyskać rozszerzenie pliku, podając parametr wiersza polecenia?

Możesz uzyskać rozszerzenie pliku, używając:

%~x1- Rozwiń tylko %1do pliku eXtension.

Możesz więc użyć czegoś takiego:

SET Extension=%~x1

...

If "%ZipType%"=="%Extension%" (goto Function1) else Goto Function2

Dalsza lektura

DavidPostill
źródło
0
@Echo OFF
SET File=%1
SET HeaderFilePath=%2
Call :sub %File%
exit /b
:sub 
SET FileName=%~n1
SET Ext=%~x1
SET PGPProcessPath=%~dp1
SET EncryptFile=%~fnx1
SET DecryptFile=%EncryptFile:_pgp=%
Echo extn is %Ext%
if "%Ext%"==".zip" (goto Function1) else Goto Function2
:Function1
echo this is function 1
goto :eof
:Function2
echo this is function2
goto :eof
:eof
Echo Process is completed
pause

Zmodyfikowałem moją partię w ten sposób ... Teraz przetwarzane są zarówno zdalne serwery, jak i lokalne ścieżki pulpitu, a JEŻELI instrukcja działa doskonale

abhayk
źródło
Myślę, że odpowiedziałem na twoje pytania, pierwotnie dotyczące ścieżek i oświadczenia IF. W skrypcie prawdopodobnie działały obie funkcje, a nie JUST Funkcja 2, ponieważ po przetworzeniu pliku „.zip” wywołano funkcję 1, ale nie przesłano kodu zwrotnego (a skrypt nie zakończył działania), więc uruchomił funkcję 2. Twoje goto :eofrozwiązania, to. Lepszym rozwiązaniem byłoby returnkod, ponieważ wywołujesz funkcję ( call : suba potem masz natychmiast EXIT /b.
ice13berg