【发布时间】:2021-04-28 13:48:22
【问题描述】:
我正在尝试创建一个用于格式化磁盘的 .bat 文件。每次我运行脚本时它都不起作用,并说它正在尝试写入一个不存在的管道。我还没有找到任何明显的原因为什么它不起作用。我在其他任何地方也没有找到答案。 这是代码
:loop
echo list disk|diskpart|find "Online"
set "disk=."
set /p "disk=Pick disk number above to destroy/reformat: "
echo.
echo list disk|diskpart|find "Disk %disk%"
if errorlevel 1 (
echo Invalid drive selection!
pause
goto :loop
) else (
echo select Disk %disk%
echo clean
echo create partition primary
echo select partition=1
echo active
echo format fs=fat32
echo assign
echo exit
)| REM diskpart
pause
【问题讨论】:
-
我建议您永远不要尝试使用批处理文件执行破坏性任务。我不会,而且我已经编写批处理文件超过 30 年了。我还强烈建议您在使用该输入之前,在没有实施一些非常强大的输入验证之前,不要将
set /p用于最终用户输入。在set /p提示符下,最终用户可以输入任何内容,(在这种情况下将作为.传递),或任何内容,包括毒字符和恶意代码,(这可能会关闭您的脚本,或造成无法估量的损害). -
没有办法知道我会去测试一个使用
diskpart的脚本。我建议您的第一步是准确定位不存在的管道被引用的位置(嗯......仔细寻找不存在的东西,begorrah......)那么 - 它是否到达if?如果是这样,请尝试将rem diskpart替换为|sort或|more等无害的东西。我对else块中的pause命令不太满意... -
查看您的代码,
2和6行的管道没有问题,所以我认为您的问题与最后一行的管道有关。 -
@Magoo 我更改了 rem diskpart 进行排序,它按预期进行并且排序没有问题。一旦我将磁盘部分放回原处,问题就会再次出现。哦,是的,它确实达到了 if。
-
@JesseMäenpää,我发布了一个答案,然后注意到您已经编辑了代码以使其无效。现在请测试您当前发布的代码,并报告您的问题是否已经解决。我怀疑它有。 顺便说一句,您不需要同时删除它们!
标签: batch-file batch-processing