【问题标题】:Batch - function - parameters not working批处理 - 功能 - 参数不起作用
【发布时间】:2018-10-15 11:08:28
【问题描述】:

在 Windows 7 (64) 上,我尝试进行最简单的函数调用,当然批量怪异再次破坏了它

我不明白为什么它不带参数,所有例子都指向这种方式

@ECHO OFF

:import

echo "%~1 %~2"
mysql -u root -e "DROP DATABASE IF EXISTS `%~1`;CREATE DATABASE `%~1`"
IF ERRORLEVEL 1 GOTO error
mysql -u root %~1 < %~1.sql
IF ERRORLEVEL 1 GOTO error


call :import "something"

:error

@echo errors !!

pause

它显示这个:

" "
ERROR 1102 (42000) at line 1: Incorrect database name ''
errors !!
Press any key to continue . . .

似乎 %~1 从不包含任何内容

【问题讨论】:

  • 如何启动批处理文件?
  • 删除@echo off,这样您就可以看到使用了哪个命令行以及使用了哪些值。
  • 您的意思是 %1 而不是 %~1 等?
  • 并将 mysql 命令拆分为 2 个单独的行...
  • 我认为你的意思是在 mysql 命令中使用单引号而不是反引号。

标签: batch-file windows-7-x64


【解决方案1】:
@echo off
setlocal
call :import "something"
if errorlevel 1 call :error
exit /b

:import
echo "%~1 %~2"
mysql -u root -e "DROP DATABASE IF EXISTS `%~1`;CREATE DATABASE `%~1`"
if errorlevel 1 exit /b 1
mysql -u root "%~1" < "%~1.sql"
if errorlevel 1 exit /b 2
exit /b

:error
@echo errors !!
pause
exit /b

在发布的问题代码中,:import 是一个标签。 解释器将忽略该行,除非 gotocall 用于从标签执行。 问题代码正在做什么从顶部开始 到底部直到到达call 行 调用上面的:import 然后继续 称为标签。代码没有那么远 %~1%~2 的参数未定义,如 它们被解释为脚本参数 而不是称为标签参数,所以mysql 导致goto error 发生的错误。

上面的代码将 2 个标签放在 exit /b 所以需要调用任何一个标签 访问。 它现在将从顶部下降到 call :import "something" 线, 这将执行:import 标签中的代码。 一旦到达exit /b,被调用的标签将 返回到call 的行。 if errorlevel 1 call :error的以下行 将call :error 如果errorlevelset 为1 或更高。

【讨论】:

  • 这是一个比我的更完整和详细的答案。虽然我可以看出该功能在文件开头时不起作用,但上面的解释解释了为什么它必须这样。退出代码的细节也做得很好:+1
【解决方案2】:

您需要稍微改变一下批处理文件的结构。

函数应该在文件的底部。 “导入”标签仅在“调用”内部运行,因此在调用期间不要试图跳出该标签。请注意为每个 GOTO 跳转使用适当的标签。

@ECHO OFF

call :import "something1" "something2"
goto end

:import
echo "%~1 %~2"
mysql -u root -e "DROP DATABASE IF EXISTS `%~1`;CREATE DATABASE `%~1`"
IF ERRORLEVEL 1 GOTO error
mysql -u root %~1 < %~1.sql
IF ERRORLEVEL 1 GOTO error
goto endOfImport
:error
@echo errors !!
:endOfImport
goto :eof

:end
pause

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-04-05
    • 1970-01-01
    • 1970-01-01
    • 2011-08-03
    • 2021-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多