如何在Python脚本中将自定义变量作为命令行参数传入CMD执行
问题修复说明
核心错误点
- 你把
print()的返回值赋值给了result:print()函数执行后只会返回None,根本不会把你拼接的命令字符串存到result里 os.system('cmd /k "result"')里的result是写死的字符串,不是你定义的变量,CMD执行的是字面量result,当然识别不出来- 路径拼接逻辑不合理:如果用户输入的源/目标路径已经带盘符,你强制拼接
:/会导致路径错误 - 没有处理带空格的路径:如果源/目标路径包含空格,robocopy会识别失败,需要给路径加双引号包裹
修正后代码
import argparse, sys, os if __name__ == '__main__': # 初始化参数解析器 parser = argparse.ArgumentParser( description="robocopy 执行脚本" ) # 添加位置参数 parser.add_argument('robocopy', help="传入 robocopy 即可执行拷贝命令") # 解析参数 args = parser.parse_args() src = input("输入源目录: ").strip() des = input("输入目标目录: ").strip() opt = "/E /Z /ZB /R:5 /TBD /NP /V /MT:16" print(args) robocopy_cmd = None if args.robocopy == "robocopy": # 给路径加双引号避免空格导致识别错误,不需要强制加:/,由用户输入完整路径 robocopy_cmd = f'robocopy "{src}" "{des}" {opt}' print(f"即将执行的命令: {robocopy_cmd}") # 只有命令生成成功才执行CMD if robocopy_cmd: # 把变量拼接到CMD执行语句里,不要写死字符串 os.system(f'cmd /k "{robocopy_cmd}"')
使用说明
- 执行脚本时需要传入位置参数
robocopy,示例启动命令:python your_script_name.py robocopy - 输入源/目标目录时建议输入完整路径,例如
D:\test\source、E:\backup\target,不需要额外加盘符后缀 - 如果不需要执行完命令保留CMD窗口,可以把
cmd /k换成cmd /c
内容的提问来源于stack exchange,提问作者clayton bivens
相关产品推荐
相关产品推荐

