2013-09-25 21 views
5

La mia comprensione è che per ottenere la data da un file passato in una subroutine come argomento, è necessario reimpostare tale argomento come variabile all'interno della subroutine. È corretto? Questo non mi ha fatto, quindi mi chiedo se non capisco completamente cosa sta succedendo. Posso usare l'argomento passato in praticamente qualsiasi altro codice di subroutine eccetto per l'estrazione della data.subroutine di script batch: passaggio di argomenti

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 

risposta

7

Usa %1 per accedere al parametro, non %i%.

Le variabili argomento hanno gli stessi modificatori delle variabili FOR, quindi è possibile utilizzare %~t1.

Non è necessario eseguire un comando nel FOR/F. È più semplice elaborare una stringa letterale utilizzando in ("string").

Nessuna necessità per l'etichetta :EOF. Ogni script ha un implicito :eof. Mi piace usare invece 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, ma la parte '% 1% si riferisce ad una variabile inesistente chiamato 1' è ovviamente sbagliato. Fa riferimento anche a '% 1', quindi viene avviata una nuova espansione percentuale, ma non riesce poiché non vi è una percentuale di chiusura né una cifra per accedere a un parametro. Btw. È impossibile espandere un nome variabile che inizia con una cifra con un'espansione percentuale (all'interno di file batch) – jeb

1

se si vuole seriamente di scrivere script batch, si dovrebbe prendere cura per la sintassi:

@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

ok, grazie a Endoro per l'aiuto. – Fractal