0

在具有长文件名的 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()
4

1 回答 1

0

我遇到的错误是因为 Windows 7 以前默认在编辑器中打开 python 文件,我在注册表中手动将其更改为使用 python 打开。通过在另一台机器上进行全新安装并让 python 安装程序设置路径等,它工作正常。问题在于 Windows 注册表设置。

于 2014-12-31T15:46:08.780 回答