6

使用 win32com.client,我试图在文件夹中创建一个简单的快捷方式。捷径但是我想有论据,除了我不断收到以下错误。

Traceback (most recent call last):
  File "D:/Projects/Ms/ms.py", line 153, in <module>
    scut.TargetPath = '"C:/python27/python.exe" "D:/Projects/Ms/msd.py" -b ' + str(loop7)

File "C:\Python27\lib\site-packages\win32com\client\dynamic.py", line 570, in __setattr__
    raise AttributeError("Property '%s.%s' can not be set." % (self._username_, attr))
AttributeError: Property '<unknown>.TargetPath' can not be set.

我的代码看起来像这样。我尝试了多种不同的变体,但似乎无法做到正确。我究竟做错了什么?

ws = win32com.client.Dispatch("wscript.shell")
scut = ws.CreateShortcut("D:/Projects/Ms/TestDir/testlink.lnk")
scut.TargetPath = '"C:/python27/python.exe" "D:/Projects/Ms/msd.py" -b 0'
scut.Save()
4

2 回答 2

9

你的代码对我有用,没有错误。(Windows XP 32 位、Python 2.7.5、pywin32-216)。

(我稍微修改了您的代码,因为TargetPath应该只包含可执行路径。)

import win32com.client
ws = win32com.client.Dispatch("wscript.shell")
scut = ws.CreateShortcut('run_idle.lnk')
scut.TargetPath = '"c:/python27/python.exe"'
scut.Arguments = '-m idlelib.idle'
scut.Save()

当我尝试以下操作时,我得到了与您类似的 AttributeError(将列表分配给Arguments属性。)

>>> scut.Arguments = []
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "c:\python27\lib\site-packages\win32com\client\dynamic.py", line 570, in __setattr__
    raise AttributeError("Property '%s.%s' can not be set." % (self._username_, attr))
AttributeError: Property '<unknown>.Arguments' can not be set.
于 2013-07-11T07:56:08.160 回答
0

“..TargetPath 应该只包含 [an] 可执行路径。” 在两个方面是不正确的:

  1. 目标也可能包含可执行文件的参数。

例如,我有一个文件 [ D:\DATA\CCMD\Expl.CMD ],其基本代码行是 START Explorer.exe "%Target%"

它的使用示例是 D:\DATA\CCMD\Expl.CMD "D:\DATA\SYSTEM - NEW INSTALL PROGS"

整行是您所指的“可执行文件”。

  1. 目标根本不必是“可执行文件”。它可以是操作系统可以对其进行操作的任何文件,例如那些默认操作以文件作为参数运行可执行文件的文件类型,例如:“My File.txt”

此文件类型的“默认操作”是使用文本编辑器打开它。实际的可执行文件运行不是明确的。

于 2013-09-02T19:48:14.920 回答