在具有长文件名的 Windows 上获取命令行参数并将其传递给函数时,我遇到了问题。
简而言之,包含空格的长文件名被分成单独的部分。
我制作了一段代码来为我提供整个命令行,但这远非理想,因为尽管它适用于多个参数,但它不适用于带有空格的 LFN。(结块是为不同的脚本制作的,我刚刚将它复制到这个)我一直在谷歌上搜索几个小时试图弄清楚这一点,因为肯定有人已经解决了这个问题。我尝试过使用 ArgParse,但也无法在不拆分文件的情况下给我文件名。
有人可以向我展示一些代码,这些代码演示了完全按原样获取命令行(减去脚本名称)并获得完整的文件名。
谢谢,亚当
[编辑..]我试着在它周围加上引号,但它仍然失败了。我通过测试代码知道它在空格上拆分输入并删除引号。来自不同测试的示例:
test.py 代码:
import sys
print ('Number of arguments:', len(sys.argv), 'arguments.')
print ('Argument List:', str(sys.argv))
for x in range(0, len(sys.argv)):
print("->" + sys.argv[x])
输出:
H:\bin>test "test lfn.txt"
Number of arguments: 3 arguments.
Argument List: ['H:\\bin\\test.py', ' test', 'lfn.txt']
->H:\bin\test.py
-> test
->lfn.txt
#
[编辑 2] 我认为这是 Windows 上的一个 Python 错误,因为双引号有效,有点:
H:\bin>test ""test lfn.txt""
Number of arguments: 2 arguments.
Argument List: ['H:\\bin\\test.py', ' "test lfn.txt"']
->H:\bin\test.py
-> "test lfn.txt"
原始代码发布在下面。
###############################################################################
# Renames a single file to ISO date format: YYYYMMDD-HHMMSS #
###############################################################################
import datetime, os, sys
def error_filename():
print("filename doesn't exist maybe.")
sys.exit(1)
def error_args():
print("Renames a single file to ISO date format: YYYYMMDD-HHMMSS")
print("Requires 1 parameter, the filename to rename")
sys.exit(2)
def error_rename():
print("Unable to rename")
sys.exit(3)
cmds = ""
for x in range(1, len(sys.argv)):
cmds = cmds + sys.argv[x]
cmds = cmds.strip()
if cmds != "":
d = datetime.datetime.now().strftime("%Y%m%d-%H%M%S")
if os.path.isfile(cmds):
fn = cmds.split(os.extsep)
fn[0]=d
newname = d + "." + fn[1]
print(cmds + " -> " + newname)
try:
os.rename(cmds, newname)
except:
error_rename()
else:
error_filename()
else:
error_args()