python - 相当于 Unix "shell function"的 Powershell 脚本

标签 python windows powershell batch-file

这基本上是 Change the current directory from a Bash script 的副本,除了我在 Windows 上并且希望能够从 powershell 脚本更改我的命令行目录。

我实际上是从 powershell 文件运行一个 python 脚本,从该 python 脚本解析输出目录,然后使用该输出作为要更改的目录,所以如果有办法从 python 脚本中执行此操作而不是 powershell 文件加分!

要 100% 清楚,是的,我知道“cd”和“os.chdir”,不,这不是我想要的 - 这只会更改脚本或批处理文件的当前目录,而不是您要更改的命令行正在运行!

代码如下(批处理文件是我的第一次尝试,我希望它是 PS1 脚本):

sw.bat - 添加到 sys $PATH 的父目录

@echo off
set _PY_CMD_="python C:\code\switch\switch.py %*"
for /f "tokens=*" %%f in ('%_PY_CMD_%') do (
    cd /d %%f
)

开关.py

import os
import argparse

LOCAL = r'C:\code\local'


def parse_args():
    parser = argparse.ArgumentParser(description='Workspace manager tool.')
    parser.add_argument('command', type=str, help='The command to execute, or workspace to switch to.')
    return parser.parse_args()

def execute_command(command):
    if command in ['l', 'local']:
        print(LOCAL)

def main():
    args = parse_args()
    execute_command(args.command)

if __name__ == '__main__':
    main()

最佳答案

如果我答对了你的问题,一个简单的方法是使用 [SS64]: FOR /F .

脚本.py:

target_dir = r"C:\Program Files"

print(target_dir)

script.bat:

@echo off

set _PY_CMD="e:\Work\Dev\VEnvs\py_064_03.07.03_test0\Scripts\python.exe" script.py

for /f "tokens=*" %%f in ('%_PY_CMD%') do (
    pushd "%%f"
)

输出:

[cfati@CFATI-5510-0:e:\Work\Dev\StackOverflow\q057062514]> ver

Microsoft Windows [Version 10.0.18362.239]

[cfati@CFATI-5510-0:e:\Work\Dev\StackOverflow\q057062514]> script.bat

[cfati@CFATI-5510-0:C:\Program Files]>
[cfati@CFATI-5510-0:C:\Program Files]> popd

[cfati@CFATI-5510-0:e:\Work\Dev\StackOverflow\q057062514]>

注意事项:

  • 我使用了pushd(而不是cd),因为简单的popd 会返回到原始目录。缺点是必须记住(堆栈)他们调用了多少次 pushd 才能匹配对应的 popd。如果要切换到 cd,请像这样使用:cd/d %%f

@EDIT0:

一开始,问题只针对batch,之后是PowerShell (PS) 要求(可以作为不同的问题)被添加。
无论如何,这是一个可以解决问题的简单(虚拟)脚本(我不是 PS 专家)。

script.ps1:

$PyCmdOutput = & 'e:\Work\Dev\VEnvs\py_064_03.07.03_test0\Scripts\python.exe' 'script.py'

Set-Location $PyCmdOutput

输出:

PS E:\Work\Dev\StackOverflow\q057062514> .\script.ps1
PS C:\Program Files>

关于python - 相当于 Unix "shell function"的 Powershell 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57062514/

相关文章:

python - Python 中有没有内置的方法来检查单个列表索引

c++ - Windows 8.1 上的最小编译环境

c++ - WinAPI:如何确定网络何时正在识别?

windows - 无法在 Windows 上将 memcached 1.4.5 安装为服务

powershell - 将所有本地成员和组一起显示

python - 从展平字典构建嵌套的 Python 字典

python - 从分布生成随机字节数组

python - 解析 bit.ly 的 XML 响应

powershell - 根据服务器名称分解 csv 数据

function - 如何从函数中调用变量