5

在尝试删除所有分区时,我正在尝试开发一个批处理文件来运行和删除 Windows 7 中的隐藏分区。通常我在命令提示符窗口中逐行执行此操作,但试图弄清楚如何创建一个批处理文件来运行并加快此过程..

这是我在命令提示符下键入的行。

disk part
Rescan
List Disk
Select Disk 3
List Partition
Select Partition 3
Delete Partition Override

我已经创建了一个 BAT 文件,但只能让第一个命令起作用。

4

5 回答 5

10

将您的 diskpart 命令(您在键入 后键入的命令diskpart)放在一个文本文件中,script.txt并使用以下命令调用 diskpart。

@echo off
diskpart /s script.txt

但要非常小心,确保您的命令正确且经过良好测试,并且不要调用批处理文件 diskpart。

请参阅此处了解更多信息:http: //support.microsoft.com/kb/300415

于 2013-06-07T16:02:40.420 回答
10

这真的很容易,但是当我查看其他人的答案时,我想“为什么要以简单的方式去做,而你却可以以艰难的方式去做”:D

好的, diskpart是终端应用程序,这意味着它有自己的 CLI 命令行界面)这意味着,如果您想将命令写入磁盘部分,则必须将其作为标准输入写入磁盘部分自己的 CLI(输入为std。这就是为什么您不能通过批处理文件写入命令的原因,因为您的 diskpart 命令在 diskpart 退出后作为 cmd.exe 的下一个命令运行。

现在我们只需要对diskpart“撒谎”并将stdin模拟到他的CLI。

我们可以这样实现:

(echo Rescan
echo List Disk
echo Select Disk 3
echo List Partition
echo Select Partition 3
echo Delete Partition Override
)  | diskpart
pause

因此,上面的代码执行以下操作:

  1. echo 命令将生成标准输出st andard输出。通常我们的命令行解释器 cmd.exe 只会在屏幕上打印出这个标准输出。(您可以通过在 cmd.exe中仅运行带括号的 echo 命令来尝试)

  2. 然后,使用管道|我们将这些 echo 命令的标准输出重定向到 diskpart 应用程序。因此,来自 echo 的标准输出现在将充当 diskpart 应用程序的标准输入。

因此,您运行 diskpart,diskpart 从 echo 获取输入,就像它从键盘获取输入一样,当然它可以工作!

就是这样,简单易行的解决方案!

于 2017-08-29T13:29:52.770 回答
2

所以嘿,我知道我参加聚会已经很晚了,但是我一直在搞乱 Diskpart 和脚本等我想做的一些后期成像的事情,虽然这不是你确切问题的直接解决方案,无论如何都要通读一遍,我敢打赌你可以把它混入你需要做的事情中:(是的,它非常混杂。我不在乎。它作为一个文件存在,不需要外部文件,并且在之后清理本身。)

REM SCRIPT TO EXTEND A VOLUME - PICKS THE CORRECT ONE REGARDLESS OF VOLUME CONFIGURATION
REM THE VOLUME AFTER IMAGING WILL ALWAYS BE 39GB IN SIZE SO THAT'S WHAT IT HINGES ON
REM
REM THIS SCRIPT BECAME NECESSARY WHEN RUNNING DISKPART WITH A FIXED SCRIPT DIDN'T WORK 
REM FOR EVERY MACHINE DUE TO DIFFERENT DISK CONFIGURATIONS
REM
REM IT'S NOT PRETTY, BUT IT GETS THE JOB DONE AND CLEANS UP AFTER ITSELF
REM
REM <CHRISTOPHER T####N> 4/27/2016
REM
@ECHO OFF
@CLS
REM
REM GET LIST OF VOLUMES AND EXPORT TO TEXT FILE TO BE RUN AS SCRIPT BY DISKPART
ECHO LIST VOLUME>>C:\VOLLIST.TXT
REM
REM RUN TEXT FILE AS SCRIPT WITH DISKPART THEN EXPORT RESULTS TO NEW TEXT FILE
DISKPART /S C:\VOLLIST.TXT>>C:\VOLTEMP.TXT
REM
REM REMOVE THAT FIRST TEXT FILE WE CREATED
DEL C:\VOLLIST.TXT
REM
REM TAKE THE LIST OF VOLUMES AND GET THE ONE YOU NEED WITH THE FIND COMMAND (MODIFY AS NEEDED)
REM THEN USE THE TOKENS/DELIMS TO GRAB JUST THE VOLUME NUMBER YOU WANT
REM AND CREATE ANOTHER TEXT FILE CONTAINING THE FINAL SCRIPT TO EXTEND THE VOLUME YOU WANT
FOR /F "TOKENS=2 DELIMS= " %%A IN ('TYPE C:\VOLTEMP.TXT ^| FIND /I "39 GB"') DO ECHO SELECT VOLUME %%A>>C:\VOLEXT.TXT
REM
REM REMOVE THE SECOND TEXT FILE
DEL C:\VOLTEMP.TXT
REM
REM APPEND ADDITIONAL DISKPART COMMANDS TO THE FINAL TEXT FILE
ECHO EXTEND>>C:\VOLEXT.TXT
REM
REM APPEND ADDITIONAL DISKPART COMMANDS TO THE FINAL TEXT FILE
ECHO EXIT>>C:\VOLEXT.TXT
REM
REM RUN DISKPART USING THE FINAL TEXT FILE AS THE SCRIPT
DISKPART /S C:\VOLEXT.TXT
REM
REM REMOVE THE FINAL TEXT FILE SO NOTHING IS LEFT BEHIND AFTER SCRIPT EXECUTION
DEL C:\VOLEXT.TXT
REM
REM PAUSE SO YOU CAN SEE IF ANYTHING FAILED, AND HOPEFULLY, WHERE
@PAUSE
于 2016-04-27T20:28:39.207 回答
2

从@Msprg 的答案中汲取灵感,可以通过使用here-string 在PowerShell 中更轻松地做到这一点

((@"
Rescan
List Disk
Select Disk 3
List Partition
Select Partition 3
Delete Partition Override
"@
)|diskpart)

如果您需要将其放在批处理文件中,您始终可以直接使用您可以在其他 StackOverflow帖子以及此线程中找到的技巧之一将其注入。

例如

<# :
@PowerShell -NoLogo -NoProfile -Command Invoke-Expression $('$args=@(^&{$args} ($input^|?{$_}));'+(${%~f0}^|Out-String)) & @GOTO :EOF
#>
((@"
Rescan
List Disk
Select Disk 3
List Partition
Select Partition 3
Delete Partition Override
"@
)|diskpart)
于 2020-08-21T17:08:44.080 回答
-1

我在搜索如何向 diskpart 脚本文件添加注释时点击这里。后来发现可以使用 REM 命令添加注释。

REM This script is to build to do so and so.
sel disk 0
sel part 1
...
于 2015-03-23T06:33:43.830 回答