Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Function 将参数批传递给函数_Function_Batch File - Fatal编程技术网

Function 将参数批传递给函数

Function 将参数批传递给函数,function,batch-file,Function,Batch File,我正在尝试创建一个简单的批处理脚本,它有一个带单参数的过程。根据internet上的一些来源,我创建了以下示例代码: :logMessage @echo on echo Hi, %1 @echo off goto :eof call:logMessage "Izomorphius" 但是我没有得到我所期望的输出-只打印“Hi”,没有参数。我做错了什么?这是一个简单的版本,可以工作 @echo off call :logMessage "Izomorphius" goto :

我正在尝试创建一个简单的批处理脚本,它有一个带单参数的过程。根据internet上的一些来源,我创建了以下示例代码:

:logMessage
   @echo on
   echo Hi, %1
   @echo off
goto :eof

call:logMessage "Izomorphius"

但是我没有得到我所期望的输出-只打印“Hi”,没有参数。我做错了什么?

这是一个简单的版本,可以工作

@echo off
call :logMessage "Izomorphius"
goto :eof

:logMessage
echo Hi, %1

请注意,它实际上会打印伊佐莫菲乌斯周围的引号,但如果不需要,只需删除它们即可。

这里是一个简单的版本

@echo off
call :logMessage "Izomorphius"
goto :eof

:logMessage
echo Hi, %1

请注意,它实际上会打印Izomorphius周围的引号,但如果不需要,只需删除它们。

我认为所有批处理函数都需要在文件末尾定义,在任何调用代码之后

call:logMessage "Izomorphius"
goto :eof

:: Start function definitions ---

:logMessage
   @echo on
   echo Hi, %1
   @echo off
   goto :eof

我认为所有批处理函数都需要在文件末尾定义,在任何调用代码之后

call:logMessage "Izomorphius"
goto :eof

:: Start function definitions ---

:logMessage
   @echo on
   echo Hi, %1
   @echo off
   goto :eof

您只需要调整代码:

goto main                                     & :: Add this line...
:logMessage
   @echo on
   echo Hi, %1
   @echo off
goto :eof

:main                                         & :: ...and this line.
call:logMessage "Izomorphius"

根据我之前的评论。

您的代码只需要调整一下:

goto main                                     & :: Add this line...
:logMessage
   @echo on
   echo Hi, %1
   @echo off
goto :eof

:main                                         & :: ...and this line.
call:logMessage "Izomorphius"

根据我之前的评论。

这段代码有缺陷,但这是另一个技巧:

@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
echo.
set "NAME=Izomorphius"
call :prepend NAME Hi
echo Message: %NAME%
echo.
goto :end

:: Functions
:prepend @varname @value
set %1=%2 !%1!
exit /B 0
:end
pause

这段代码有缺陷,但这是另一个技巧:

@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
echo.
set "NAME=Izomorphius"
call :prepend NAME Hi
echo Message: %NAME%
echo.
goto :end

:: Functions
:prepend @varname @value
set %1=%2 !%1!
exit /B 0
:end
pause

“我认为所有批处理函数都需要在文件末尾定义”-不,批处理确实很旧。函数可以在文件中的任何地方定义。“我认为所有批处理函数都需要在文件末尾定义”-不,批处理确实很旧。函数可以在文件中的任何位置进行定义。代码的唯一问题是,当前的执行永远不会到达
call
语句。要使其正常工作,请在最顶部添加一行
goto main
,并在
call
语句上方添加一行:
:main
。代码的唯一问题是,当前的执行永远不会到达
call
语句。要使其正常工作,请在最顶部添加一行
goto main
,并在
call
语句上方添加一行:
:main
。如果要在%1参数中传递多个单词,例如“Izomorphius Smith”,则可能需要使用引号。在这种情况下,如果要在%1参数中传递多个单词,例如“Izomorphius Smith”,则可以使用
echo Hi、%%1
删除引号。在这种情况下,要删除引号,可以使用
echo Hi、%~1