我正在尝试制作批处理文件我的代码有什么问题?

时间:2017-04-23 23:21:00

标签: batch-file

我正在尝试创建一个代码,我可以访问网站而无需访问我的浏览器我有搜索功能,我会手动更改我对编码很新,所以任何建议都有用,这里是代码。< / p>

@echo off
echo Top searches
echo 1. Faceit
set /p name =
if %name% EQU "1" goto F
if %name% NEQ "1" then goto custom

:F
start "" https://www.faceit.com/en


:custom
echo What website would you like to go to?
set /p x =
start "" https://www.%x%

1 个答案:

答案 0 :(得分:1)

您的代码中有相当多的内容会阻止它以任何有意义的方式工作。初看起来,我看到十件不同的东西要么是完全错误的,要么只是违反了可以考虑的东西&#34;良好的编程习惯&#34;批量生产。

1/2。变量名中的空格很重要

出于某种原因,Microsoft决定允许使用变量名称的空格,因此%this is a valid variable name%。认真。因此,您的两个set /p语句都在创建您从未使用过的变量。

而不是set /p name =set /p x =,请使用set /p name=set /p x=

3/4。在set语句

周围加上引号

这个只是一个很好的编程习惯,可以说不是错误的,#34;但这是一个早期形成的好习惯。

使用引号可以避免用户输入&>之类的内容,并让这些内容破坏脚本的流程。您可以将引号括在提示符周围(如set /p variable="Enter text: "),但如果您使用常规set语句执行此操作,则引号将成为值的一部分。为避免这种情况,请将第一个引号放在变量名称的左侧,如下所示:set /p "variable=Enter text: "

这也可以防止任何隐藏空间在值的末尾被粘贴。

5。那么不是批处理中的关键字

第二个then语句中的if,如果要给您一个语法错误,因为它不是批处理中的有效关键字。只是摆脱它。

if "%name%" NEQ "1" goto custom

6/7。比较中的行情很重要

当您在比较的一侧放置引号时,您还需要在另一侧放置引号。这样可以保持&>等字符不会破坏脚本流。

if "%name%" EQU "1" goto F
if "%name%" NEQ "1" goto custom

8。丢失的转到(或退出)将导致:自定义在以下后立即运行:F

批处理脚本从上到下运行,除非由gotocallif或其他一些流控制命令执行操作。在这种情况下,调用start "" https://www.faceit.com/en后,下一个非空白行为:custom

要避免:自定义运行,请在第一次启动exit /bgoto :eof后终止脚本 - 这两个都将停止脚本,但如果您从脚本运行脚本,请保持命令提示符处于打开状态命令行而不是双击它。请注意,如果您使用goto :eof,则需要制作:eof标签,因为它已内置在命令提示符中。

9/10。在goto命令

中将冒号放在标签前面

同样,没有必要,只是良好的编程习惯。当你使用call来运行子程序时,你必须包括冒号,所以你可能在任何地方都是一致的。

其他说明

  • 首次运行脚本时,您看到的只是
  

热门搜索   1. Faceit

就是这样。没有什么可以告诉用户该做什么或通过键入1之外的其他内容来表明他们可以进入另一个站点。除非您计划成为唯一使用该脚本的人,否则我建议在该部分中添加更具描述性的内容。

  • 如果您要自动将https://www.添加到自定义网址的开头,请将其放在屏幕上,这样用户就不会意外地转到{ {1}}或其他什么。

  • 您可能希望查看https://www.https://www.google.com命令以查找脚本的未来版本以替换初始choice命令,具体取决于您希望为用户提供的选项数。

  • 在您的代码中添加评论不会有任何伤害。

最终,它看起来像这样

set /p