使用os.system移动文件和使用相同命令从cmd行移动文件不同



我正试图使用文件名中的通配符将文件从python脚本中移动到特定文件夹,但当我从cmd line\powershell terminal运行相同命令时,我遇到了一个错误。

python代码:

import os
import subprocess
path = '".\*.c" ".\tag_*\src\" -force'
os.system('echo move ' + path)
os.system('move ' + path)
subprocess.run("echo move "+ path , shell=True, check=True)
subprocess.run("move "+ path , shell=True, check=True)
Output:
move ".*.c" ".tag_*src" -force
The syntax of the command is incorrect.
move ".*.c" ".tag_*src" -force
The syntax of the command is incorrect.

如果我使用echo复制输出终端中显示的命令,并在ps终端中粘贴后运行相同的cmd,则文件移动成功。

在powershell终端中,这会将所有c文件复制到src文件夹中,而不会出现任何问题,任何文件类型也是如此(*.h也可以正常工作(。

move ".*.c" ".tag_*src" -force

有人能解释一下为什么python脚本不能做到这一点吗?我可以用os.execute在python脚本中执行其他终端命令,到目前为止,只是复制和移动命令失败了。

根据评论,这个解决方案对我有效:

import shutil
for path in glob('tag_*'):
for files in glob('*.h'):
shutil.move('.\' + files , '.\' + path + '\src\' + files)
for files in glob('*.c'):
shutil.move('.\' + files , '.\' + path + '\src\' + files)

注意:我的用例只有一个名为tag_*的文件夹,其他文件夹可能不同,请相应地修改通配符。

我以前无法使用shutil.move,因为我的第一次尝试是在目标中不添加文件名,而且效果不太好,所以我想尝试使用cmd-line/ps命令移动。

最新更新