您好我有一个关于批处理文件中的功能的问题。我有以下设置:
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
)
哪个非常不足
答案 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而不是批处理的建议。)