2013-09-25 26 views
5

Rozumiem, że aby uzyskać datę z pliku przekazanego do podprogramu jako argumentu, należy ustawić ten argument jako zmienną w podprogramie. Czy to jest poprawne? To mi nie wychodzi, więc zastanawiam się, czy nie w pełni rozumiem, co się dzieje. Mogę użyć przekazanego argumentu w praktycznie każdym innym podprogramie kodu, oprócz ekstrakcji daty.podprocedura skryptu wsadowego: przekazywanie argumentów

set setupEXE=setup.exe 

CALL :SUB_CheckCorrectDate %setupEXE% 
GOTO EOF 
::---------------------------------- 

:SUB_CheckCorrectDate 
set filename=%1% 

:: SUCCESSFUL 
for %%x in (%filename%) do set FileDate=%%~tx 
@For /F "tokens=1-3 delims=-/ " %%A in ('@echo %FileDate%') do @( 
Set file_Month=%%A 
Set file_Day=%%B 
Set file_Year=%%C 
) 

:: GET ERROR  
for %%x in (%1%) do set FileDate=%%~tx 
@For /F "tokens=1-3 delims=-/ " %%A in ('@echo %FileDate%') do @( 
Set file_Month=%%A 
Set file_Day=%%B 
Set file_Year=%%C 
)  

GOTO:EOF 

:: ------------------ 
:EOF 

Odpowiedz

7

Zastosowanie %1 aby uzyskać dostęp do parametru, a nie %i%.

Zmienne argumentów mają takie same modyfikatory jak zmienne FOR, więc można użyć %~t1.

Nie trzeba wykonywać polecenia w FOR/F. Łatwiej jest przetwarzać ciąg literału za pomocą in ("string").

Nie jest wymagana etykieta :EOF. Każdy skrypt ma domyślny :eof. Lubię używać zamiast tego exit /b.

@echo off 
setlocal 
set "setupEXE=setup.exe" 

call :SUB_CheckCorrectDate "%setupEXE%" 
exit /b 

::---------------------------------- 

:SUB_CheckCorrectDate 
set "filename=%~1" 
for /F "tokens=1-3 delims=-/ " %%A in ("%~t1") do ( 
    set "file_Month=%%A" 
    set "file_Day=%%B" 
    set "file_Year=%%C" 
) 
exit /b 
+1

+1, ale część '% 1% odnosi się do nieistniejącej zmiennej o nazwie 1 ' jest oczywiście błędne. Odnosi się także do "% 1", a następnie rozpoczyna się nowa ekspansja procentowa, ale kończy się niepowodzeniem, ponieważ nie ma procentu zamknięcia ani cyfry dostępu do parametru. Btw. Niemożliwe jest rozwinięcie nazwy zmiennej zaczynającej się od cyfry z procentowym rozszerzeniem (wewnątrz plików wsadowych) – jeb

1

jeśli poważnie chcą pisać skrypty wsadowe, należy zadbać o składni:

@echo off &setlocal 
set "setupEXE=setup.exe" 

CALL :SUB_CheckCorrectDate "%setupEXE%" 
GOTO EOF 
::---------------------------------- 

:SUB_CheckCorrectDate 
set "filename=%~1" 

:: SUCCESSFUL 
for %%x in ("%filename%") do set "FileDate=%%~tx" 
For /F "tokens=1-3 delims=-/ " %%A in ("%FileDate%") do ( 
    Set "file_Month=%%A" 
    Set "file_Day=%%B" 
    Set "file_Year=%%C" 
) 

:: GET ERROR  
for %%x in ("%~1") do set "FileDate=%%~tx" 
For /F "tokens=1-3 delims=-/ " %%A in ("%FileDate%") do ( 
    Set "file_Month=%%A" 
    Set "file_Day=%%B" 
    Set "file_Year=%%C" 
)  

GOTO:EOF 

:: ------------------ 
: 
+0

w porządku, dziękuję Endoro za pomoc. – Fractal