在 PowerShell 中运行批处理 (.BAT) 文件

问题描述 投票:0回答:2

回到我的 windows 3.1 天,我写了两个简单的批处理文件“cc.bat”和“xx.bat”,从那以后我一直在使用它们。我一直将它们放在 Windows 路径中。

cc.bat 将带我到 C: 驱动器,带我到根目录并清除屏幕。

@echo off
c:
cd\
cls

xx.bat 只是关闭 DOS 窗口(当时只想省下两次击键,我很蹩脚。。。)

@echo off
exit

今天我在 PowerShell 中尝试了它们,第一个只清除了屏幕,第二个什么也没做?

我知道如何执行它们,但我只想输入“cc”并让它们运行。

我是否需要在脚本中添加诸如“cmd.exe -/c”或“Start-Process”之类的东西,或者是否有像 DOS 中那样的简单方法???

提前致谢

powershell batch-file
2个回答
0
投票

您可以通过多种方式做到这一点。如果是我,我会这样做……这并不“简单”,但这是我向终端添加自定义功能的首选方式:

cc.bat
- 将目录更改为 C:\ 然后清屏

PowerShell 相当于一个函数:

<# Creates a new function named Set-LocationThenClear
   Takes one parameter named 'Path' which is defaulted to 'C:\' #>
function Set-LocationThenClear {
    param(
        [Parameter(Position=0)]
        [string]$Path = 'C:\'
    )
    Set-Location -Path $Path
    Clear-Host
}

New-Alias -Name 'cc' -Value 'Set-LocationThenClear'

在这里,我在 PowerShell 中创建了一个函数来执行您想要的操作,但它也可以采用您想要的任何路径。

用法:

# Long way:
PS> Set-LocationThenClear -Path 'F:\'

# Using defaults:
PS> Set-LocationThenClear

# Using alias:
PS> cc 'F:\' # and since `-Path` has "Position=0", we don't need to name it

# Using alias and default:
PS> cc

xx.bat
- 退出/关闭终端

Powershell 与

exit
有点奇怪,因为它只是一个具有操作的保留字。它不是 cmdlet、函数或 exe 文件,它只是内置于 powershell 中。所以出于某种原因,他们不允许你为它创建一个别名。

所以按照与上面相同的步骤,我可能会做这样的事情:

function Exit-Terminal {
    exit
}

New-Alias -Name 'xx' -Value 'Exit-Terminal'

用法:

# Long way
PS> Exit-Terminal

# Using alias
PS> xx

注意:我之所以先创建一个长名称的函数,然后创建一个别名,而不是直接将函数命名为

cc
xx
,是因为这只是在PowerShell中命名函数的最佳实践。建议您使用
Verb-Noun
格式命名函数。

他们甚至有一个建议的动词列表,用于表示含义:

Get-Verb
.


这里最重要的部分是这些只是功能,它们还没有存在于任何地方。如果将它们粘贴到 powershell 中,您将能够在该会话中使用它们。但是你不能在其他会话中使用它们,它们会在你关闭窗口后立即消失。

为了让它们持久存在,我将它们放在我的 PowerShell 配置文件中。您可以通过输入以下内容来访问:

PS> notepad.exe $PROFILE

如果它不存在,那么你可以使用

New-Item $PROFILE
,如果它已经存在你只会得到一个错误。

每次打开 powershell 终端时,您放入此文件中的任何内容都会运行(Windows PowerShell 和 PowerShell 使用不同的配置文件,因此请记住这一点)。


0
投票

您可以使用 bat 文件的符号链接(例如,您的 bat 文件位于某处,符号链接位于

$HOME/bin/cc

那么你不必指定文件类型,只需使用

cc
而不是
cc.bat
.

© www.soinside.com 2019 - 2024. All rights reserved.