通过python脚本运行bat file(锁定文件)时出现问题

2024-09-29 23:26:11 发布

您现在位置:Python中文网/ 问答频道 /正文

当我运行python脚本时,它运行bat文件。在我尝试锁定文件夹之前,这一切正常。我使用bat文件来解锁和锁定文件夹。我只是使用python脚本来运行bat文件。当我从文件资源管理器运行bat文件时,它可以正常工作,但是当我从python脚本运行它时,它会给出以下错误消息:

Access is denied.
File not found - Control Panel.{21EC2020-3AEA-1069-A2DD-08002B30309D}
Folder locked

最后一条消息说它已锁定,但文件夹未锁定。你知道吗

我使用以下两行代码从python脚本运行bat文件:

import subprocess
subprocess.call([r'filepath/FolderLocker.bat'])

当出现错误消息时,.bat文件正试图运行这两行:

ren Locker "Control Panel.{21EC2020-3AEA-1069-A2DD-08002B30309D}"

&

attrib +h +s "Control Panel.{21EC2020-3AEA-1069-A2DD-08002B30309D}"

我不完全理解命令提示符命令以及它们是如何工作的。 bat文件中的代码是:

cls
@ECHO OFF
title Folder Locker
if EXIST "Control Panel.{21EC2020-3AEA-1069-A2DD-08002B30309D}" goto UNLOCK
if NOT EXIST Locker goto MDLOCKER

:CONFIRM
echo Would you like to Lock the Folder(Y/N)
set/p "cho=>"
if %cho%==Y goto LOCK
if %cho%==y goto LOCK
if %cho%==n goto END
if %cho%==N goto END
echo Invalid choice.
goto CONFIRM

:LOCK
ren Locker "Control Panel.{21EC2020-3AEA-1069-A2DD-08002B30309D}"
attrib +h +s "Control Panel.{21EC2020-3AEA-1069-A2DD-08002B30309D}"
echo Folder locked
goto End

:UNLOCK
echo Enter password to Unlock folder
set/p "pass=>"
if NOT %pass%==Password_Here! goto FAIL
attrib -h -s "Control Panel.{21EC2020-3AEA-1069-A2DD-08002B30309D}"
ren "Control Panel.{21EC2020-3AEA-1069-A2DD-08002B30309D}" Locker
echo Folder Unlocked successfully
goto End

:FAIL
echo Invalid password
goto end

:MDLOCKER
md Locker
echo Locker created successfully
goto End

:End

Tags: 文件echo脚本文件夹消息iffoldercontrol
1条回答
网友
1楼 · 发布于 2024-09-29 23:26:11

enter image description here


  • Update

尝试删除[ ]并将filepath/FolderLocker.bat替换为drive + full + path + bat,使用完整路径:

试试这个:[]"G:\SO_en-EN\Q59447409\Q59447409v.2.cmd"


import subprocess
subprocess.call(r'"G:\SO_en-EN\Q59447409\Q59447409v.2.cmd"')


1)要使用attrib文件夹,您需要添加标志/d

2)不要使用ren,而是使用move

3)使用if /i表示大写/小写大小写

4)将完整路径添加到ren(move)命令%cd%\Locker


@echo off & title <nul & title Folder Locker & cd /d "%~dp0"
set "_cpl=%~dp0Control Panel.{21EC2020-3AEA-1069-A2DD-08002B30309D}"

rem./ :: for debug 
rem./ :: && echo/ The bat file are here: "%~dp0"
rem./ :: && echo/ The system running the bat here: "%cd%\"
rem./ :: && echo/ test write file log.log in: "%~dp0"
rem./ :: && echo/ test >"%~dp0log.log"
rem./ :: && echo/ if not exist "%~dp0log.log" echo/ not exist "%~dp0log.log"
rem./ :: && timeout -1
rem./ :: && echo/ Test write file log.log in: "%cd%" 
rem./ :: && echo/ test >""%cd%\log.log"
rem./ :: && echo/ if not exist ""%cd%\log.log" echo/ not exist ""%cd%\log.log" 
rem./ :: && timeout -1 
rem./ ::         

if exist "%_cpl%" goto UNLOCK
if not exist Locker goto MDLOCKER

:CONFIRM
echo Would you like to Lock the Folder(Y/N)
set/p "_cho=>" 
if /i "%_cho%"=="y" (goto :LOCK
) else if /i "%_cho%"=="n" goto:End

echo/Invalid choice. && goto CONFIRM

:LOCK
>nul move /y "%cd%\Locker" "%_cpl%" || (echo Folder move "%cd%\%_cpl%" faild)
attrib +h +s /d "%_cpl%" && (echo Folder locked) || (echo Folder locked faild)
goto End

:UNLOCK
echo Enter password to Unlock folder
set/p "_pass=>" 
if not "%_pass%"=="Password_Here!" goto :FAIL

attrib -h -s /d "%_cpl%" && (echo/ Attribute removed)  || (echo/ Folder remove attribute faied & goto :end)

move /y "%_cpl%" "%cd%\Locker" >nul && (echo/ "%cd%\Locker" moved)  || (echo/ Folder remove attribute faied & goto :end)

if not exist "%cd%\Locker" echo= Error moving Locker & goto :End

echo Folder Unlocked successfully && goto End

:FAIL
echo Invalid password && goto end

:MDLOCKER
md Locker && (echo Locker created successfully) || (echo/ md Locker faild)
goto End

:End

相关问题 更多 >

    热门问题