14

我的理解是,为了从作为参数传递给子例程的文件中获取日期,您必须将该参数重新设置为子例程中的变量。这个对吗?这对我来说并没有,所以我想知道我是否不完全理解发生了什么。除了日期提取之外,我几乎可以在任何其他子例程代码中使用传入的参数。

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
4

2 回答 2

18

用于%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
于 2013-09-25T13:57:10.163 回答
0

如果你真的想编写批处理脚本,你应该注意语法:

@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

:: ------------------
:
于 2013-09-25T13:57:54.087 回答