将path参数/变量从批处理文件传递到python,sys.argv[]ony给出最后一个目录,而不是整个字符串
我已经为windows终端创建了一个自定义命令将path参数/变量从批处理文件传递到python,sys.argv[]ony给出最后一个目录,而不是整个字符串,python,batch-file,path,sys,Python,Batch File,Path,Sys,我已经为windows终端创建了一个自定义命令scan。我的目标是自动将扫描移动到某个目录。我将硬编码我的路径,但如果我想将扫描移动到另一个目录,我已经包含了一个参数2(参数1是“开始”执行)。批处理文件将路径作为字符串传递给python脚本 我知道这是因为当我写作的时候 scan start "C:/path/to/target/dir/" 在我的windows终端中,它吐出以下内容来运行我的脚本 python "C:\Users\MY USERNAME\my_
scan
。我的目标是自动将扫描移动到某个目录。我将硬编码我的路径,但如果我想将扫描移动到另一个目录,我已经包含了一个参数2(参数1是“开始”执行)。批处理文件将路径作为字符串传递给python脚本
我知道这是因为当我写作的时候
scan start "C:/path/to/target/dir/"
在我的windows终端中,它吐出以下内容来运行我的脚本
python "C:\Users\MY USERNAME\my_scripts\scan.py" start C:/path/to/target/dir/
不幸的是,我无法用以下代码“读取”整个路径:
print(Path(sys.argv[2]).stem)
在这种情况下,结果是dir
打印(路径(sys.argv[0]).stem)
=扫描
打印(路径(sys.argv[1]).stem)
=开始
打印(路径(sys.argv[2]).stem)
=dir
为什么我不能得到整个路径,我如何得到它?我想要这样的东西:
print(Path(sys.argv[2]).stem)
=C:/Path/to/target/dir/
您确实在阅读整个路径。但是你要阻止它,缩短到dir。使用以下命令
print(Path(sys.argv[1]))
为什么要使用
stem
?它完全符合您所展示的内容,即所产生的输出没有任何错误/意外;如果想要不同的结果,请不要使用stem
。阅读@barny的文档,因为我是编程和python的初学者,我对很多可用的模块不太熟悉,我发现很难找出问题的根源。既然你提到了这一点,我觉得自己像个白痴:D,但我会提醒自己更经常地阅读文档。谢谢@Mofi,谢谢你的回答。我尝试了python“%~dp0scan.py”%*
(我将目录添加到路径中)。但是如果我没有输入第二个参数(我希望是可选的),那么我的python脚本将返回一个索引器:列表索引超出范围,这是有意义的。目前,我的批处理文件中有一些IF语句,如果没有,则将参数设置为空字符串。我相信python中有一个更好的解决方案,但目前还可以。关于这个话题,我得做更多的研究。