我正在制作一个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?
答案 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")