我正在尝试创建批处理文件来打开/关闭驱动器的只读模式.
我创建了两个调用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
解决方法
您需要管理权限才能使用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