Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Python在Windows 7中创建快捷方式文件_Python_Windows 7_Operating System_Shortcut - Fatal编程技术网

使用Python在Windows 7中创建快捷方式文件

使用Python在Windows 7中创建快捷方式文件,python,windows-7,operating-system,shortcut,Python,Windows 7,Operating System,Shortcut,有没有一种简单的方法可以在Windows7的Python上创建快捷方式?我在网上查了一下,但似乎没那么简单 我尝试过使用这种简单的方法: hi = open("ShortcutFile.lnk", "w") hi.close() 这将创建一个快捷方式文件。但是我如何编辑它所连接的链接呢。喜欢打开的文件吗?有人能给我一个正确的方向吗?您当前正在做的是在您的计算机上当前工作目录中创建一个相当于空文件(在本例中是一个快捷方式)的文件 要使此文件成为可用的快捷方式,您需要将一些信息写入正在创建的文件中

有没有一种简单的方法可以在Windows7的Python上创建快捷方式?我在网上查了一下,但似乎没那么简单

我尝试过使用这种简单的方法:

hi = open("ShortcutFile.lnk", "w")
hi.close()

这将创建一个快捷方式文件。但是我如何编辑它所连接的链接呢。喜欢打开的文件吗?有人能给我一个正确的方向吗?

您当前正在做的是在您的计算机上当前工作目录中创建一个相当于空文件(在本例中是一个快捷方式)的文件

要使此文件成为可用的快捷方式,您需要将一些信息写入正在创建的文件中,以告知windows此快捷方式文件将要执行的操作。在本例中,这就是您希望它运行的快捷方式类型以及完成手头任务所需的任何其他参数

我相信pywin32对于这些任务中的大多数都会派上用场:

如果要创建internet快捷方式,可在此页面上找到该快捷方式的示例(使用pywin32):


如果要创建internet快捷方式以外的其他快捷方式,则需要根据要运行的快捷方式类型查找相应的windows命令(例如,打开特定应用程序或特定文件)。

Old,但是我仍然想发布一个答案来帮助那些可能有相同问题并且需要代码示例的人

首先,使用
pip安装pywin32下载pywin32,或者下载二进制文件或文件,然后
pip安装

import win32com.client
import pythoncom
import os
# pythoncom.CoInitialize() # remove the '#' at the beginning of the line if running in a thread.
desktop = r'C:\Users\Public\Desktop' # path to where you want to put the .lnk
path = os.path.join(desktop, 'NameOfShortcut.lnk')
target = r'C:\path\to\target\file.exe'
icon = r'C:\path\to\icon\resource.ico' # not needed, but nice

shell = win32com.client.Dispatch("WScript.Shell")
shortcut = shell.CreateShortCut(path)
shortcut.Targetpath = target
shortcut.IconLocation = icon
shortcut.WindowStyle = 7 # 7 - Minimized, 3 - Maximized, 1 - Normal
shortcut.save()
当我有一个带有调试控制台的GUI时,我使用了
WindowStyle
,我不希望控制台总是弹出。我还没有尝试过一个不受安慰的程序


希望这有帮助

如果您正在寻找与Python 3兼容的独立于平台的版本,请查看

来自swinlnk.swinlnk导入swinlnk
swl=SWinLnk()
swl.create_lnk('W:\Foo\Bar','/mnt/win\u share/playerd/Bar\u winlink.lnk'))

此python脚本基于C/Bash工具。

您可以生成一个
.bat
文件,并使用正确的路径替换特定部分,以便使用空格进行操作

管理带空格的windows路径的正确方法是将带空格的路径用“”换行。例如,如果路径为

C:\Users\Pc\Desktop

更正的版本是

C:\Users\“电脑”\桌面

我提出的解决办法是:

1-生成一个包含关键字的基本
.bat
文件,以替换为通过Python的正确路径

2-使用
os
Python库根据当前环境构建路径

3-使用Python打开
base.bat
文件,并逐行检查关键字搜索,以替换为先前在陡峭2中生成的正确路径

4-同时,我们检查并用纠正的路径替换我们的特定关键字,我们编写一个最终的
.bat
文件,其中包含
base.bat
文件的更新行,位于相同的
中,用于
循环statement

5-使用
子流程
Python库执行
final.bat
文件:

# Python Code
subprocess.run("final.bat", stdout=subprocess.PIPE)

为了用代码解释它,我将使用一个个人屏幕记录器项目,它是这样的:

# Python code
import os, subprocess

path = os.environ["USERPROFILE"]+"\\Desktop\\accsdirecto.vbs" user =
os.environ["USERNAME"] path = path.replace('{}'.format(user),
'"{}"'.format(user))

base = open("base", "r") bat = open("lnk.bat", "w")

for x in base:
    if "[r]" in str(x):
        x = x.replace("[r]", path)
    bat.write(x)

base.close()
bat.close()

subprocess.run("final.bat", stdout=subprocess.PIPE)
1) 我们的
base.bat
文件(查看我们的
[r]
关键字):

=============================================================

@回音

set dir=%LOCALAPPDATA%\srw

设置sof=srw.exe

集合名称=Grabador de Pantalla

ECHO Set objShell=WScript.CreateObject(“WScript.Shell”)>>[r]

ECHO ficheroAccesoDirecto=“%USERPROFILE%\Desktop\%name%.lnk”>>[r]

ECHO Set objAccesoDirecto=objShell.CreateShortcut(ficheroAccesoDirecto)>>[r]

ECHO objAccesoDirecto.TargetPath=“%dir%\%sof%”>>[r]

ECHO objAccesoDirecto.Arguments=“”>>[r]

ECHO objAccesoDirecto.Description=“%name%”>>[r]

ECHO objAccesoDirecto.HotKey=“ALT+CTRL+G”>>[r]

ECHO objAccesoDirecto.IconLocation=“%dir%\vista\icon.ico”>>[r]

ECHO objAccesoDirecto.WindowStyle=“1”>>[r]

ECHO objAccesoDirecto.WorkingDirectory=“%dir%”>[r]

ECHO objAccesoDirecto.Save>>[r]

ATTRIB+h+s[r]

开始/B/等待[r]

擦除/Q/a h s[r]

出口

=============================================================

2-现在我们开始编写Python脚本。构建路径:

# Python Code
import os, subprocess

path = os.environ["USERPROFILE"]+"\\Desktop\\accsdirecto.vbs"
user = os.environ["USERNAME"]
path = path.replace('{}'.format(user), '"{}"'.format(user))
此代码生成我们的间隔格式化路径:

# Python Code
for x in base:
    if "[r]" in str(x):
        x = x.replace("[r]", path)
    bat.write(x)
C:\Users\“El computator”\Desktop\accsdirecto.vbs

3-打开
base.bat
文件并创建我们的
final.bat
文件:

# Python Code
base = open("base", "r")
bat = open("lnk.bat", "w")
4-逐行检查
base.bat
文件,并替换
[r]
关键字以获得正确的格式化路径:

# Python Code
for x in base:
    if "[r]" in str(x):
        x = x.replace("[r]", path)
    bat.write(x)
最后,我们关闭
.bat
文件:

# Python Code
base.close()
bat.close()
5-使用
subprocess
Python库执行
final.bat
文件:

# Python Code
subprocess.run("final.bat", stdout=subprocess.PIPE)
我们的整个Python脚本如下所示:

# Python code
import os, subprocess

path = os.environ["USERPROFILE"]+"\\Desktop\\accsdirecto.vbs" user =
os.environ["USERNAME"] path = path.replace('{}'.format(user),
'"{}"'.format(user))

base = open("base", "r") bat = open("lnk.bat", "w")

for x in base:
    if "[r]" in str(x):
        x = x.replace("[r]", path)
    bat.write(x)

base.close()
bat.close()

subprocess.run("final.bat", stdout=subprocess.PIPE)
最后,生成的最终.bat文件如下所示:

# Python code
import os, subprocess

path = os.environ["USERPROFILE"]+"\\Desktop\\accsdirecto.vbs" user =
os.environ["USERNAME"] path = path.replace('{}'.format(user),
'"{}"'.format(user))

base = open("base", "r") bat = open("lnk.bat", "w")

for x in base:
    if "[r]" in str(x):
        x = x.replace("[r]", path)
    bat.write(x)

base.close()
bat.close()

subprocess.run("final.bat", stdout=subprocess.PIPE)
=============================================================

@回音

set dir=%LOCALAPPDATA%\srw

设置sof=srw.exe

集合名称=Grabador de Pantalla

ECHO Set objShell=WScript.CreateObject(“WScript.Shell”)>>C:\Users\“El computator”\Desktop\accsdirecto.vbs

ECHO ficheroAccesoDirecto=“%USERPROFILE%\Desktop\%name%.lnk”>>C:\Users\“El Computerator”\Desktop\accsdirecto.vbs

ECHO Set objAccesoDirecto=objShell.CreateShortcut(ficheroAccesoDirecto)>>C:\Users\“El Computerator”\Desktop\accsdirecto.vbs

ECHO objAccesoDirecto.TargetPath=“%dir%\%sof%”>>C:\Users\“El computerator”\Desktop\accsdirecto.vbs

ECHO objAccesoDirecto.Arguments=“”>>C:\Users\“El computator”\Desktop\accsdirecto.vbs

ECHO objAccesoDirecto.Description=“%name%”>>C:\Users\“El computator”\Desktop\accsdirecto.vbs

回声小体