Fra*_*tal 10 arguments batch-file argument-passing subroutine
我的理解是,为了从作为参数传递到子例程的文件中获取日期,必须将该参数重新设置为子例程中的变量.它是否正确?这对我来说没有,所以我想知道我是不是完全明白发生了什么.除了日期提取之外,我几乎可以在任何其他子例程代码中使用传入的参数.
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
Run Code Online (Sandbox Code Playgroud)
dbe*_*ham 10
使用%1访问参数,没有%i%.
参数变量与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
Run Code Online (Sandbox Code Playgroud)