将批处理文件夹创建脚本转换为python

时间:2019-07-08 18:13:41

标签: python python-3.x batch-file for-loop directory

我正在制作一个python程序,它将某些文件夹移动到不同的目录中。目前,我正在使用效果很好的旧批处理脚本-但我想知道如何在python中而不是批处理中执行这些确切的操作,因此我不必调用.bat文件。最终,我想将它们全部放入一个.py并从中创建一个.exe。

这是我要转换的东西:

此脚本移动了一些文件(我的python输出移至notes.txt文件)

for /F "delims=" %%a in (notes.txt) do robocopy /s /MOVE "C:\Users\koka\Documents\Python Scripts\%%a" "C:\Users\koka\Desktop\OUTPUT\%%a\Notes"
pause

然后此脚本移动其余文件:

dir /b /ad > modmovelist.txt
for /F "delims=" %%a in (modmovelist.txt) do robocopy /s /MOVE
"C:\Users\koka\Documents\Python Scripts\%%a" "C:\Users\koka\Desktop\OUTPUT\%%a\Mods"

最后,此脚本将返回所有文件夹并进行清理,将我想要的所有丢失的文件夹添加到每个“ %% a”下。

set homepath=C:\Users\koka\Desktop\Basics
FOR /f "tokens=*" %%G in ('dir /ad /b "%homepath%\*"') DO (
    if not exist "%homepath%\%%G\Emails"    mkdir "%homepath%\%%G\Emails"
)
FOR /f "tokens=*" %%G in ('dir /ad /b "%homepath%\*"') DO (
    if not exist "%homepath%\%%G\Notes" mkdir "%homepath%\%%G\Notes"
)
FOR /f "tokens=*" %%G in ('dir /ad /b "%homepath%\*"') DO (
    if not exist "%homepath%\%%G\Mods" mkdir "%homepath%\%%G\Mods"
)

程序按上面列出的顺序执行。 让我大跌眼镜的是,我找不到如何解释“ %% a”的原因-这会是另一个for循环吗?也必须有一个干净的解决方案来复制dir命令。

如何将所有这些转换为纯python?

2 个答案:

答案 0 :(得分:0)

尝试单独使用“ glob”和“ shutil”查找“ os”方法。这些方法将允许您浏览计算机的dir系统并使用文件进行操作。您必须导入它们才能像这样使用它们:import os,import shutil,import glob。

答案 1 :(得分:0)

您可以使用shutil.move(src, dst)将文件或目录src递归移动到另一个位置dst

例如,您的第一个脚本可以写为:

#!/usr/bin/python
import shutil

# Read from notes file
notes = open("notes.txt").read().splitlines()

# Loop through notes file
for n in notes:
    shutil.move("Python Scripts/" + n, "OUTPUT/" + n + "/Notes")

您的第二批脚本看上去本质上是相似的,因此请在此之后对其进行建模。

对于最后一个批处理脚本,您无需为每个操作使用三个单独的for循环。而是将所有动作归为一个:

set homepath=C:\Users\koka\Desktop\Basics
FOR /f "tokens=*" %%G in ('dir /ad /b "%homepath%\*"') DO (
    if not exist "%homepath%\%%G\Emails"    mkdir "%homepath%\%%G\Emails"
    if not exist "%homepath%\%%G\Notes" mkdir "%homepath%\%%G\Notes"
    if not exist "%homepath%\%%G\Mods" mkdir "%homepath%\%%G\Mods"
)

对于python,您可以执行以下操作:

#!/usr/bin/python
import os

homepath = "Basics"

# Just get the directories within the homepath
directories = next(os.walk(homepath))[1]

for d in directories
    if not os.path.exists(homepath + "/" + d + "/Emails")
        os.mkdir(homepath + "/" + d + "/Emails")
    if not os.path.exists(homepath + "/" + d + "/Notes")
        os.mkdir(homepath + "/" + d + "/Notes")
    if not os.path.exists(homepath + "/" + d + "/Mods")
        os.mkdir(homepath + "/" + d + "/Mods")