.Bat To .Py Rewrite

时间:2013-08-01 02:01:44

标签: python python-2.7 batch-file copy

我正在尝试将这个小的.bat脚本重写为.py文件主要用于练习但是我有很多麻烦让整个shutil模块对我有利,似乎有很多方法可以去做使用复制,删除和dircreate。

但是我的主要希望是有人可以将这些基本命令转换为工作脚本,所以当我处理其他脚本时,我有一些东西可以解决,并希望最终通过使用开始理解。

任何帮助都会很棒! :)

        SET USERNAME

:: Create new directory
md "C:\Users\%USERNAME%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Data"   

COPY "Data" "C:\Users\%USERNAME%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Data"
COPY "System32.lnk" "C:\Users\%USERNAME%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup"


start /d "C:\Users\%USERNAME%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Data" explorer.exe 
start /d "C:\Users\%USERNAME%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Data" PnkBstrA.exe

启动问题:

嘿srry重新发布但脚本无法在脚本结束时启动应用程序,如果我只是从脚本中取出启动命令并将它们放在如下所示的新脚本中。一旦第一个应用程序关闭,它就会启动第一个应用程序和以下应用程序。

它似乎也就像它设置为一个接一个地启动应用程序,导致它们不能同时运行。

import os
import shutil
import subprocess

data_dir = os.path.expandvars(r"C:\Users\%USERNAME%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Data")
menu_dir = os.path.expandvars(r"C:\Users\%USERNAME%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup")


subprocess.call(['explorer.exe', data_dir])
subprocess.call(['PnkBstrA.exe'], cwd=data_dir)

编辑:我还需要将此编辑的启动文件直接放在文件夹中,该文件应启动2个程序,以使其正常运行。

POPEN试验:

import os
import shutil
import subprocess

data_dir = os.path.expandvars(r"C:\Users\%USERNAME%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Data")
menu_dir = os.path.expandvars(r"C:\Users\%USERNAME%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup")

subprocess.Popen(['explorer.exe', data_dir])
subprocess.call(['PnkBstrA.exe'], cwd=data_dir)

Edit'd-的PathName:

import os
import shutil
import subprocess

data_dir = os.path.expandvars(r"C:\Users\%USERNAME%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Data")
menu_dir = os.path.expandvars(r"C:\Users\%USERNAME%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup")

subprocess.Popen(['explorer.exe', data_dir])
subprocess.call([r'C:\C:\Users\Spanjer\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Data\Data\PnkBstrA.exe'], cwd=data_dir)

Edit'd PathName CMD读数:

C:\Users\Spanjer\Desktop>installtest2.py
Traceback (most recent call last):
  File "C:\Users\Spanjer\Desktop\installtest2.py", line 9, in <module>
    subprocess.call([r'C:\C:\Users\Spanjer\AppData\Roaming\Microsoft\Windows\Sta
rt Menu\Programs\Data\Data\PnkBstrA.exe'], cwd=data_dir)
  File "C:\Python27\lib\subprocess.py", line 524, in call
    return Popen(*popenargs, **kwargs).wait()
  File "C:\Python27\lib\subprocess.py", line 711, in __init__
    errread, errwrite)
  File "C:\Python27\lib\subprocess.py", line 948, in _execute_child
    startupinfo)
WindowsError: [Error 2] The system cannot find the file specified

C:\Users\Spanjer\Desktop>

最终脚本100%工作:

import os
import shutil
import subprocess

data_dir = os.path.expandvars(r"C:\Users\%USERNAME%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Data")
menu_dir = os.path.expandvars(r"C:\Users\%USERNAME%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup")
dest_dir = os.path.join(data_dir, r'Data')
if not os.path.exists(data_dir):
    os.mkdir(data_dir)

if os.path.exists(dest_dir):
    shutil.rmtree(dest_dir)

shutil.copytree(r"Data", dest_dir)
shutil.copy(r"System32.lnk", menu_dir)
subprocess.Popen([r'C:\Users\Spanjer\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Data\Data\explorer.exe'], cwd=data_dir)
subprocess.call([r'C:\Users\Spanjer\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Data\Data\PnkBstrA.exe'], cwd=data_dir)

1 个答案:

答案 0 :(得分:2)

请尝试以下代码:

import os
import shutil
import subprocess

data_dir = os.path.expandvars(r"C:\Users\%USERNAME%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Data")
menu_dir = os.path.expandvars(r"C:\Users\%USERNAME%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup")
dest_dir = os.path.join(data_dir, r'Data')
if not os.path.exists(data_dir):
    os.mkdir(data_dir)

if os.path.exists(dest_dir):
    shutil.rmtree(dest_dir)

shutil.copytree(r"Data", dest_dir)
shutil.copy(r"System32.lnk", menu_dir)
subprocess.call(['explorer.exe', data_dir])
subprocess.call(['PnkBstrA.exe'], cwd=data_dir)

os.path.expandvars

  

os.path.expandvars(路径)

     

返回扩展了环境变量的参数。子串   表单$ name或$ {name}由environment的值替换   变量名。格式错误的变量名称和对不存在的引用   变量保持不变。

     

在Windows上,除$ name和之外,还支持%name%expansions   $ {名称}。

os.mkdir

  

os.mkdir(路径[,模式])

     

使用数字模式模式创建名为path的目录。默认模式   是0777(八进制)。在某些系统上,模式被忽略。在哪里使用,   首先屏蔽当前的umask值。如果目录已经   存在,引发OSError。

shutil.copy

  

shutil.copy(src,dst)

     

将文件src复制到文件或目录dst。如果dst是目录,   在src中创建(或覆盖)与src具有相同基本名称的文件   指定的目录。权限位被复制。 src和dst是   以字符串形式给出的路径名称。

subprocess.call

  

* subprocess.call(args,,stdin = None,stdout = None,stderr = None,shell = False)

     

运行args描述的命令。等待命令完成,然后   返回returncode属性。

     

上面显示的参数仅仅是最常见的参数   在下面的常用参数中(因此在...中略微奇怪的表示法)   缩写签名)。完整的功能签名与   Popen构造函数的函数 - 这个函数传递了所有提供的函数   参数直接通过该接口。