如何在 Windows 中为可以锁定(只读)和解锁驱动器的 diskpart cmd 创建批处理文件

Posted

技术标签:

【中文标题】如何在 Windows 中为可以锁定(只读)和解锁驱动器的 diskpart cmd 创建批处理文件【英文标题】:how to create batch file for diskpart cmd in windows which can lock (read only) and unlock the drive 【发布时间】:2016-09-02 09:53:20 【问题描述】:

我正在尝试创建批处理文件来打开/关闭驱动器的只读模式。

我创建了两个调用 diskpart 的批处理文件,以及两个包含要传递给 diskpart 的命令的文本文件。

当我单独运行 diskpart 命令时,它们可以工作;但是当我通过批处理文件和文本文件运行它们时,它们不起作用。


锁定磁盘的批处理文件

diskpart /s readonlyfile.txt > logfile .txt
pause

解锁磁盘的批处理文件

diskpart /s offreadonlyfile.txt
pause 

readonlyfile.txt(用于锁定磁盘)

diskpart 
list disk
select disk 1 
attributes disk set readonly 

offreadonlyfile.txt(用于解锁磁盘)

diskpart 
list disk
select disk 1 
attributes disk clear readonly

【问题讨论】:

我认为您在关于脚本文件名称的问题中有一些拼写错误。在批处理文件中,两者都称为 readonlyfile.txt,而第一个应该是 lock.txt,第二个应该是 unlock.txt。如果不是拼写错误,那就是问题所在,如果是拼写错误,请查看返回的错误级别。 logfile 和 .txt 之间有一个空格,这是拼写错误吗?如果不是,则使用“日志文件 .txt”,否则将被视为两个单独的参数。 如果我没记错的话,diskpart 需要管理员权限。如果您启用了 UAC,您可能需要在运行 diskpart 之前拥有您的批处理脚本 prompt for elevation。 用户通常使用由驱动器号标识并显示在文件管理器中的卷进行操作。只创建一个批处理脚本而不使用任何额外的 .txt 文件是有意义的,这些文件会要求用户输入驱动器号、显示相关磁盘状态并提供锁定或解锁磁盘及其所有卷。 【参考方案1】:

您需要管理权限才能使用 diskpart,如果您没有这些权限,那么您的批处理脚本将静默失败。要自动请求管理权限,您可以将 Visual Basic 与批处理脚本结合使用。您还可以使用简单的重定向为您自动创建临时文件并在完成后将其删除

@echo off
setlocal enabledelayedexpansion
REM  --> Check for permissions
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"

REM --> If error flag set, we do not have admin.
if '%errorlevel%' NEQ '0' (
    echo Requesting administrative privileges...
    goto UACPrompt
) else ( goto gotAdmin )

:UACPrompt
    echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
    echo UAC.ShellExecute "%~s0", "", "", "runas", 1 >> "%temp%\getadmin.vbs"

    "%temp%\getadmin.vbs"
    exit /B

:gotAdmin
    if exist "%temp%\getadmin.vbs" ( del "%temp%\getadmin.vbs" )
    pushd "%CD%"
    CD /D "%~dp0"
    set /p "mode=Do you ant to set read or write: "
    :: call the first 4 letters of the string
    call :%mode:~0,4%
    pause
endlocal
goto eof

:read
    echo.diskpart>readonlyfile.txt
    echo.list disk>>readonlyfile.txt
    echo.select disk 1>>readonlyfile.txt
    echo.attributes disk set readonly>>readonlyfile.txt
    diskpart /s readonlyfile.txt>logfile.txt
    del readonlyfile.txt
exit /b 0

:writ
    echo.diskpart>offreadonlyfile.txt
    echo.list disk>>offreadonlyfile.txt
    echo.select disk 1>>offreadonlyfile.txt
    echo.attributes disk clear readonly>>offreadonlyfile.txt
    diskpart /s offreadonlyfile.txt
    del offreadonlyfile.txt
exit /b 0

UAC 提示脚本的来源:https://sites.google.com/site/eneerge/scripts/batchgotadmin

【讨论】:

以上是关于如何在 Windows 中为可以锁定(只读)和解锁驱动器的 diskpart cmd 创建批处理文件的主要内容,如果未能解决你的问题,请参考以下文章

(Discord.py) 如何锁定和解锁语音通道

Windows 凭据提供程序、筛选器和解锁工作站方案

10分钟后锁定和解锁屏幕时发生的崩溃如何解决?

如何锁定和解锁 SQL SERVER 表?

如何用java实现文件操作的锁定及解锁

在 Linux 中锁定和解锁用户的 3 种方法