Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Loops 如何在批处理脚本的for/f循环中从输出设置多个变量?_Loops_Batch File_Variables_Cmd - Fatal编程技术网

Loops 如何在批处理脚本的for/f循环中从输出设置多个变量?

Loops 如何在批处理脚本的for/f循环中从输出设置多个变量?,loops,batch-file,variables,cmd,Loops,Batch File,Variables,Cmd,我试图写一个脚本,但我真的不擅长写批处理脚本。我试图创建一个脚本,识别本地硬盘驱动器,并将这些硬盘驱动器的字母放入一个变量中,然后在另一个for循环中使用该变量对硬盘驱动器进行加密解密 例如: :check for /f "tokens=2 delims==" %%d in ('wmic logicaldisk where "drivetype=3" get name /format:value') do ( set vvv=%%d for /f &quo

我试图写一个脚本,但我真的不擅长写批处理脚本。我试图创建一个脚本,识别本地硬盘驱动器,并将这些硬盘驱动器的字母放入一个变量中,然后在另一个for循环中使用该变量对硬盘驱动器进行加密解密

例如:

:check
for /f "tokens=2 delims==" %%d in ('wmic logicaldisk where "drivetype=3" get name /format:value') do (
set vvv=%%d
for /f "tokens=1,*" %%A in ('manage-bde -status %vvv% ^| findstr Conversion') do set var1=%%B
Rem  Try to find if value is Encrypted or not
echo %vb1%|find "Encrypted" >nul
if errorlevel 1 ( goto :check) else ( goto :decrypt_c))

也许你最好还是用这个

此示例将创建变量,例如%EncryptedDriveLetter[1]、%EncryptedDriveLetter[2]、%EncryptedDriveLetter[3]%等,其各自的内容分别为C:、e:、F:

@Echo Off&设置本地启用扩展禁用延迟扩展 对于/F Delims^=='2^>NUL Set ENCRYPTEDDRIVELETER['Do Set%%G]中的%%G= 对于“^%SystemRoot%\System32\wbem\WMIC.exe”中的/F Delims^=%%G^ /命名空间:\\root\CIMv2\Security\MicrosoftVolumeEncryption路径^ Win32_EncryptableVolume,其中^ ConversionStatus!=“0”和EncryptionMethod!=“0”和VolumeType
该代码可以正常工作,直到echo%%d,当我尝试将其放入manage bde命令时无法工作…例如,当我有3个硬盘驱动器时,我将循环并关闭所有分区的BitLocker。谢谢!

与其重新发明轮子,不如针对您试图解决的情况搜索几十个重复的问题,并尝试o使用一个或多个已批准的解决方案。捕获命令列表。请注意,如果您没有在for loopMatija92之外修改或使用for loopMatija92,则没有理由将命令输出分配给for LOOP中的变量,考虑到我在提供回答,用你的示例代码,在你发布这篇文章之前71分钟!对不起,我有一个窗口没有打开,我刚刚回答了扩展我的问题,所以我没有注意到你的答案。不幸的是,你的代码根本帮不了我,但感谢你抽出时间来尝试!Matija92,我自己使用了那个特定的方法,所以我知道工作正常。我提供的代码将输出所有经过bitlocker加密的固定驱动器的驱动器号。我提供了一个指向该类信息的链接,以便您可以根据需要调整任何where筛选器,并且还可以替换get方法来做其他事情。也许您只是没有尽力帮助我们e我在为您的需要制定更具体的内容时提供的信息。Compo,谢谢,但我将制作一个脚本,在其中我可以使用您的变量%EncryptedDriveLetter%在命令中管理bde-off%EncryptedDriveLetter%,并对所有bitlocker加密的固定驱动器执行相同的操作。非常感谢您的帮助!我很高兴在我的回答中,我添加了一个额外的示例,向您展示我关于调整get方法的意思。该示例是一个单独的命令行,该命令行应解密所有bitlocker加密的固定驱动器,遵守通常的密钥限制等。再次感谢Compo!但是您能给我一些建议,如何解决将变量放入com中的问题mand,我想了解如何使用FOR循环中的变量,并将其放入某个命令中。@echo off SETLOCAL enabledayedexpansion FOR/f tokens=2 delims==%d in'wmic logicaldisk where drivetype=3获取名称/格式:value'do Set vvvv=%%d echo!vvv!manage bde-off%vvvv%pause'@echo off SETLOCAL ENABLEDELAYEDEXPANSION for/f tokens=2 delims==%%%d in'wmic logicaldisk where drivetype=3获取名称/格式:value'do Set vvvv=%%d echo!vvv!Set myvar=manage bde-off!vvv!!myvar!pauseendlocal@Matija92,我不知道你为什么一直留任g代码与下面的注释部分中的我的答案无关。说清楚点,我不会修改你的代码,因为我不认为这是执行任务的正确方式,我理解你试图实现的。如果你想,提供代码并提供你试图实现的整项任务,以便我能够确定我的目标ne如果有更好或更可靠的方法,请随时这样做,但这不会影响发布的关闭通知。好的,无论如何,谢谢你。我找到了一个解决方案。因为我生活在德语中,所以我将一些命令改编为德语,但用途和功能是相同的。我的脚本找到本地磁盘,然后是decrypted加密。@echo off SETLOCAL ENABLEDELAYEDEXPANSION:check for/f tokens=2 delims==%%d in'wmic logicaldisk where drivetype=3获取名称/格式:value'do set vvv=%%d set myvar=manage bde-status!vvv!set myvar2=manage bde-off!vvvv!call!myvar!for/f tokens=1,*%A in'manage bde-status!vvvvv!^ findstr Konvertierungsstatus'do set vb1=%%B Rem尝试查找值是否为entschlüsselt echo!vb1!echo!vb1!|如果错误级别1超时3,则查找verschl>nul else调用!myvar2!超时5 endlocal
@Echo Off
:check
for /f "tokens=2 delims==" %%d in ('wmic logicaldisk where "drivetype=3" get name /format:value') do (
echo %%d
manage-bde -off %%d )
pause