用参数创建函数

时间:2017-04-05 13:56:16

标签: windows batch-file

您好我有一个关于批处理文件中的功能的问题。我有以下设置:

echo off
set dSource=%1
set dTarget=%2
set fType=%3
for /f "delims=" %%f in ('dir /a-d /b /s %dSource%\%fType%') do (
    copy /V "%%f" %dTarget%\tempsrc 2>nul
)

我可以使用以下参数调用此批处理文件:

test.bat "C:\Batch" "C:\Output" "text.xml"

我是否有可能拥有,就像在Javascript或任何其他编程语言中一样,这个函数将参数作为输入,这样我就可以这样调用:

functionName(dSource,dTarget,fType1)
functionName(dSource,dTarget,fType2)
etc..

否则我必须这样做:

for /f "delims=" %%f in ('dir /a-d /b /s %dSource%\%fType1%') do (
    copy /V "%%f" %dTarget%\tempsrc 2>nul
)
for /f "delims=" %%f in ('dir /a-d /b /s %dSource%\%fType2%') do (
    copy /V "%%f" %dTarget%\tempsrc 2>nul
)

哪个非常不足

2 个答案:

答案 0 :(得分:2)

您可以label which you can invoke使用call ::label

call ::funct param_1 param_2

exit /b %errorlevel%

:funct [dsource ftype]
echo off
set dSource=%1
set dTarget=%2
set fType=%3
for /f "delims=" %%f in ('dir /a-d /b /s %dSource%\%fType%') do (
    copy /V "%%f" %dTarget%\tempsrc 2>nul
)

您需要在启动函数定义之前设置exit /b,以防止它们执行两次。

答案 1 :(得分:2)

批处理文件没有真正的功能(从返回值的意义上说);但是,它们具有相当于可以取参数的过程或子程序。子程序/过程由CALL命令调用。如果您不需要将信息从被调用方传递回调用方,则CALL ed例程可以存储在单独的.BAT.CMD文件中;如果你需要传回信息("函数hack"),子程序必须是调用者文件中的标记块。对于后者,请参阅the DOSTips Batch Function Tutorial

(对于它的价值,我同意Bill_Stewart关于使用PowerShell而不是批处理的建议。)