我一直在寻找这个来回的答案,但无济于事。我在Windows上工作,用Python编写了一个脚本,将源文件复制到其他备份目的地(Dropbox文件夹和远程驱动器(。
import os, shutil
source = r'C:********Accounts_Passes.kdbx'
file_name = source.split('\')[-1]
cloud_backup = r'C:****DropboxBackup'
pendrive_backup = r'I:'
def backup (source, destination):
if not os.path.exists(destination):
os.mkdir(destination)
shutil.copy(source, destination)
if __name__ == '__main__':
if os.path.exists(pendrive_backup.split('\')[0]):
backup(source, pendrive_backup)
print(f"{file_name} file backed up to pendrive!")
else:
print(f"Pendrive disconnected, couldn't backup {file_name} to it")
backup(source, cloud_backup)
print(f"{file_name} file backed up to Dropbox!")
print("DONE!")
我希望它通过Windows任务计划程序运行它,所以我创建了一个.bat文件。
echo off
echo Backup launched
timeout /t 5
start "C:Program FilesPython38python.exe" "C:*****Backup ScriptsKeypass_backup.py"
pause
问题是当我通过文件运行它时.bat Python 脚本的输出不会显示在我强烈要求的控制台中。关于如何通过批处理文件打开命令行,显示Python脚本的打印输出的任何建议都很棒。
谢谢
话筒
我的建议是更正批处理文件内容。
您应该从您提供的内容的第4
行中删除start
。
@Echo Backup launched
@%__AppDir__%timeout.exe /T 5 /NoBreak
@"%ProgramFiles%Python38python.exe" "C:*****Backup ScriptsKeypass_backup.py".
@Pause
如果您想忽略该建议并以任何方式使用start
,那么正确的语法将是:
@Start "" "%ProgramFiles%Python38python.exe" "C:*****Backup ScriptsKeypass_backup.py".
如果没有该语法,您的start
命令实际上使用C:Program FilesPython38python.exe
作为"窗口标题",并运行命令"C:*****Backup ScriptsKeypass_backup.py"
,这不是您希望它执行的操作。
如果打开命令提示符窗口,键入start /?
或help start
,然后按Enter,您应该会看到第一组双引号用于定义标题。
此外,您应该能够通过任务计划程序运行"C:Program FilesPython38python.exe"
,将"C:*****Backup ScriptsKeypass_backup.py"
作为参数,而无需批处理文件。您甚至可以通过任务调度程序运行cmd.exe
来做到这一点,/K
、"C:Program FilesPython38python.exe"
和"C:*****Backup ScriptsKeypass_backup.py"
作为其参数。