【发布时间】:2016-12-24 10:11:02
【问题描述】:
我正在尝试制作一个快速的 Python 脚本来重命名一堆文件。这些文件是在这个 NTFS 驱动器上的 Linux 系统中制作的,但我现在在 Windows 上。命名约定如下所示:
Screenshot at 2016-12-11 21:12:56.png
: 字符在 Windows 文件名中是非法的,所以这个脚本的行为对我来说有点奇怪。
for i in os.listdir("."):
print(i)
x = i.replace(":", "-")
comm = """mv "{}" "{}" """.format(i, x)
os.system(comm)
在上面的代码中,print(i) 愉快地打印了文件名。但是,当我尝试运行 os.system(comm) 来重命名我的文件时,我收到了这个错误:
mv: cannot stat ‘Screenshot at 2016-12-24 14:54:57.png’: No such file or directory
首先,我觉得有点奇怪的是,Windows 下的 Python 可以分辨出这些顽皮的文件存在,但实际上无法移动它们。其次,解决这个问题的最佳方法是什么?
我也尝试过shutil.move() 和os.rename(),但没有成功。 This SO question 似乎讨论了这个问题,但似乎更关心预防而不是修复它。我显然可以切换回 Linux 并修复它,但我想知道我是否不能在 Windows 上修复它。
【问题讨论】:
-
您将
"""与"混合使用。那样有用吗?应该不是'mv "{}" "{}"'.format(i, x)(这里不需要多行)? -
我会使用
os.rename()而不是系统调用。 -
所以你使用的
mv,是Windows上的MSYS/Cygwin风格吗? -
@hiroprotagonist 是的,它有效,毫无疑问你的也一样,我只是更喜欢多线。 @Jean
os.rename()也不起作用,mv是 Windows 10 的 Linux 子系统中提供的mv。官方称为 Bash on Ubuntu on Windows(微软一如既往地保持简洁)。 -
@Daniel,WSL 的
mv命令应该需要bash -c "mv ...",并且您必须使用/mnt文件夹。运行where mv以查看mv正在执行什么。