【问题标题】:Create a function from CMD (Without batch file)从 CMD 创建一个函数(没有批处理文件)
【发布时间】:2016-02-27 02:04:29
【问题描述】:

在批处理文件中,要定义一个函数,您需要输入一个: 符号,然后是函数的名称

例如:

:func copy "test.txt" "D:\test"

然后当你想调用你使用goto的函数时:

goto func

有没有办法在没有批处理文件的情况下做到这一点?从 cmd 定义函数?

【问题讨论】:

标签: batch-file cmd


【解决方案1】:

Batch (cmd.exe) 根本不知道函数。

使用标签,您可以构建与函数类似的构造并用于返回使用exit /b(或goto :eof),
但实际上这不是一个函数。
但是标签只能在批处理文件中使用!

另一方面,您可以使用宏,这些是带有代码的变量。
也没有真正的功能,但可以像一个一样工作。

宏的使用(本例获取字符串长度):

set "var=abcdef"
%strlen% var

要构建宏,您只需将其复制到命令提示符中

cmd /v:on 

set LF=^


::Above 2 blank lines are required - do not remove
set ^"\n=^^^%LF%%LF%^%LF%%LF%^^"
:::: StrLen pString
set strLen=@for /L %n in (1 1 2) do @if %n==2 (%\n%
        for /F "tokens=1,2 delims=, " %1 in ("!argv!") do @(%\n%
              set "str=A^!%~1^!"%\n%
              set "len=0"%\n%
              for /l %A in (12,-1,0) do @(%\n%
                set /a "len|=1<<%A" ^> nul %\n%
                for %B in (^^!len^^!) do @if "^!str:~%B,1^!"=="" set /a "len&=~1<<%A" ^> nul%\n%
              )%\n%
              for %v in (^^!len^^!) do @if "%~2" neq "" (set "%~2=%v") else echo %v%\n%
        ) %\n%
) ELSE set argv=,

但是宏有变得讨厌的趋势。

或者你可以阅读DosTips: Executing GOTO/CALL in a cmd.exe,它有点先进的技术

【讨论】:

    【解决方案2】:

    你可以做一个宏。

    set "func=copy "test.txt" "D:\test""
    

    然后执行它,

    %func%
    

    【讨论】:

    • 但是setlocalendlocal在命令提示符下不起作用
    • 你是对的。刚刚测试,setlocal 没有封装临时范围,endlocal 也没有超出该范围。
    【解决方案3】:

    :func 不是函数,而是批处理文件中的标签。 IE。指向goto。子程序/函数中没有return

    【讨论】:

    • @i486,CALL LABEL会有回报
    • @Squashman 好的,这似乎是新功能。旧的 Windows 批处理文件中没有 CALL/return。
    • 通过goto :eof 或文件结尾调用返回
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多