Visual Studio - 运行批处理文件

24

我想要的

我希望可以在不离开Visual Studio的情况下轻松运行批处理文件。这些批处理文件并不总是相同的,它们会根据我正在使用的解决方案而改变。

目前我了解的

我知道您可以在Visual Studio的“工具”部分(在“外部工具”下)中创建自定义快捷方式。

我的解决方案有各种脚本/批处理文件,我希望有一种方法可以在解决方案文件夹或其他专门针对解决方案的地方创建快捷方式。

我可以创建脚本,但似乎没有办法运行脚本。我不喜欢每次想运行脚本时都要打开Windows资源管理器。

也许可以通过插件在解决方案资源管理器中选择文件后启动进程?或类似的东西?

6个回答

19

以下是如何通过右键单击文件并选择“运行批处理文件”来添加外部工具以运行批处理文件的完整步骤,同时每当您需要编辑文件时,只需打开并编辑即可。

以下是如何操作的方法...

创建名为“运行批处理文件”的外部工具。

    1) From Tools-> External Tools, create a new and put the below parameters:
    2) Set the Command to: CMD.EXE
    3) Set the Arguments to: /c "$(ItemPath)"
    4) Set the Initial directory to: $(ItemDir)
    5) ![DO NOT Check the "use output window" check box and then Apply to create the command
    Note where the new command appeared in the list of commands. 
        The external commands are numbered from 1 starting below the divider bar. 
#1 is usually "Create GUID"
To make it easy to remember you can move the new  command to the top, to be the number one command in the list.][1]

    6) Now go to Tools -> Customize and select the commands tab.
    7) Select the Context menu radio button and select "Project and Solution Context menus | Item" from the drop down.
    8) Now use "Add Command..." to add a new command
    9) In the Categories list select "Tools"
    10) From the commands select the "External Command #" that corresponds to the position of the "Run Batch file" custom command you noted the number of in step 5 above.
    11) Move it to the right position in the list add keyboard short cuts etc.
    12) Close the dialogue.

现在在批处理文件上右键单击,您应该看到一个“运行批处理文件”菜单项。这将执行批处理文件并在VS输出窗口中显示其输出。

希望这有所帮助。

输入图像描述

输入图像描述


我尝试了那个,但在我的情况下,上下文菜单项似乎是灰色的。我做错了什么?我在“项目和解决方案上下文菜单| 项”和“项目和解决方案上下文菜单| 文件夹”上使用它,外部命令是 cmd.exe /k cd /d $(ItemDir)。注意:外部命令通过“工具”菜单可以正常工作,但在我的情况下无法作为上下文菜单。 - Matt
我真的很喜欢这种方法。但是有没有一种方法可以将这个新的上下文菜单项限制在某些类别的项目中?将C#源代码作为批处理运行毫无意义,感觉会使已经充满上下文菜单的内容更加臃肿。 - Stefan Bormann

16

我是通过右键单击批处理文件,选择“打开方式”,然后添加了一个新的编辑器,并使用了explorer.exe(然后将其设置为默认编辑器)来完成此操作。

添加程序对话框


1
很棒的答案。只需补充一点,右键单击您的解决方案 > 添加现有项,然后选择批处理文件。现在右键单击已添加的批处理文件并选择“使用...打开”。这是您执行上述提示的位置,即将其设置为在资源管理器中打开。确保将其设置为默认值,然后您只需双击即可运行它! - Bealer
我喜欢这个答案。我一直在寻找实现这个的方法。致敬和感谢。我已经在大约20-30个项目中使用它,效果非常好! - Brandon Johnson
不错!但现在你可以选择通过“打开方式”并选择“Windows资源管理器”来执行,或者将其设置为默认选项,并每次想要编辑时都走这条长路。 - Stefan Bormann

12

最佳的做法是编写一个外部工具,然后可以根据你加载的当前解决方案传递参数。

你可以将许多项目和解决方案特定的变量传递给你的外部工具。打开“外部工具”对话框,选择列表框中的工具。你将看到你的外部工具的标题以及指向你想要调用的脚本或批处理脚本的命令。参数编辑框旁边有一个带箭头的按钮。点击箭头,你会看到一个大列表,其中包含你可以传递给外部工具的变量或参数。

因此,例如,你可以使用以下内容:

$(ProjectDir) - 你正在工作的项目的完整路径目录。例如 "C:\builds\myproject"

$(ProjectPath) - 你正在工作的vcproj的完整路径名称。例如 "C:\builds\myproject\foo.vcproj"

$(ProjectName) - 项目的名称。例如 "foo"

$(SolutionDir) - 当前加载的解决方案的完整路径目录。例如 "C:\builds\mysolution"

等等...


1
没错,如果所有的解决方案都有类似的脚本运行,那么这将起作用。但是它们可能会有很大的差异。一个项目可能有一个“render-stuff”脚本,其他项目可能有“generate-code”来生成类。在Visual Studio中添加宏并不太难,我可以将它们注册到键盘快捷方式上。因此,如果我能找到一种方法将当前文件名和路径传递给宏,也许这就是正确的方法。然后,宏可以执行给定的文件名。 - quip
1
$(ItemPath) - 是在 Visual Studio 中当前活动的文件。或者如果鼠标焦点在解决方案资源管理器中的代码、项目或解决方案文件上时也可以使用。我使用 $(ItemPath) 作为参数提交到 Perforce 来编辑“当前活动文件”。 - C.J.
哦,我不知道这个,听起来可能行得通。我会试一试! - quip
哥们儿,太棒了!你真牛。 - quip

1
你可以向解决方案中添加一个新的Makefile项目。Makefile项目是一个简单的Visual Studio项目,其构建操作可以是任何你想要的命令行。它在新项目对话框中列在Visual C++ - General类别下。在你的情况下,只需将构建命令设置为调用你的批处理脚本即可。然后,在解决方案资源管理器中工作时执行你的脚本,只需右键单击Makefile项目并选择“生成”上下文菜单项。
由于你打算按需运行该脚本(而不是每次构建都运行),因此你需要将其从配置管理器中的构建中移除。不要忘记禁用所有平台和配置的项目构建。
大多数宏都可以用于Makefile项目的构建命令行,尽管可能与你的主项目相关联的某些宏值不正确。

1

构建事件钩子(预构建、预链接、后构建)对您有用吗?您还可以查看自定义构建设置。这些都是解决方案的一部分。


不是很准确 - 这些脚本不一定是用于构建,它们只是我想要自动化的东西,比如复制文件或其他任务。 - quip
作为一个后置构建事件,我现在正在运行一些脚本来替换资源文件中的字符串,并将可执行文件复制到特定位置。您希望何时执行这些脚本?我能想到的另一个选项是使用Python脚本来触发构建并完成您想要的任何操作。 - yasouser

-1
在我的环境中(Windows 11 v21H2 上的 Visual Studio 2022 v17.3.6),对于 cmd.exe,$(ItemPath) 参数会导致错误,但是如果不使用该参数,则可以正常工作。

enter image description here

我觉得这个很合理,因为这个命令叫做“打开方式”,并且像Windows的“打开方式”命令一样自动将文件作为参数传递。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接