2013-09-25 18 views
5

サブルーチンに引数として渡されたファイルから日付を取得するには、その引数をサブルーチン内の変数として再設定する必要があります。これは正しいです?これは私にとって以来のことではないので、何が起こっているのか十分に理解していないのだろうかと思っています。実際には日付抽出以外の他のサブルーチンコードで渡された引数を使用できます。バッチスクリプトサブルーチン:引数の受け渡し

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 

答えて

7

%i%、パラメータにアクセスすること%1を使用していません。

引数変数にはFOR変数と同じ修飾子がありますので、%~t1を使用できます。

FOR/Fでコマンドを実行する必要はありません。 in ("string")を使用して文字列リテラルを処理する方が簡単です。

:EOFラベルが不要です。すべてのスクリプトに暗黙の:eofがあります。代わりに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、しかし、一部 '%1%という名前の、存在しない変数を参照1'明らかに間違っています。それは '%1'も参照し、新しいパーセント拡張が開始されますが、パラメータにアクセスするための終了パーセントも数字もないので失敗します。 Btw。 %拡張で数字で始まる変数名を展開することは不可能です(バッチファイル内) – jeb

1

あなたが真剣にバッチスクリプトを書きたい場合、あなたは構文のための世話をする必要があります:

@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

大丈夫、Endoroに助けてください。 – Fractal

関連する問題