Diskpart输出的字符串比较

时间:2017-02-17 03:43:44

标签: batch-file

我在这里遗漏了一些东西,但我无法看到它。我确信这个变量会被调用,但我没有得到它。

我的目标是构建一个通用脚本,将文件从SD卡复制到一对可移动驱动器。关键是确保备份是一致的,无论连接的驱动器和驱动器号。

我拼凑了一些脚本,这些脚本做了我想做的事,但我错过了一个细节。

在代码下方使用DiskPart进行数据转储,以创建附加驱动器的文件。然后,我遍历文件并使用Drive Label作为目标。根据驱动器标签,它被标记为源或目标。

下面的部分可以达到字符串比较的IF点(寻找带有部分标签的驱动器" CAMX")

我使用DOS"字符串替换,如果不同,那就是你想要的那个"因此接近" NEQ"操作

目前NEQ失败的原因在于它看到了所有结果而非等同。如果将运算符更改为EQU,则无法返回。

两个"回声"对于要比较的字符串是调试。如果你看看这些值,我们就会发现它们和!matchvar:CAMX =!正在努力。

这是代码

@echo off
cls
title "Detecting device drive letters..."
setlocal enabledelayedexpansion

echo Detecting device drive letters...

:: Create a script file to be used by diskpart and then dump all volumes to a temp file
    echo list volume > %systemdrive%\ListDrives.tmp
    diskpart /s %systemdrive%\ListDrives.tmp > %systemdrive%\CurrentDrives.tmp

:: Parse the output from 'Diskpart> list volume' for available volumes

    echo   Checking drive IDs
    FOR /F "tokens=2-4" %%a IN (%systemdrive%\CurrentDrives.tmp) DO ( set matchvar="%%c"  & set comparevar=!matchvar:CAMX=! & IF /I !comparevar! NEQ !matchvar! @echo Drive %%b was found to be %%c and will SOURCE...%%a & @echo !matchvar! & @echo !comparevar!)

这是我得到的Diskpart文件

Microsoft DiskPart version 10.0.10586

Copyright (C) 1999-2013 Microsoft Corporation.
On computer: NEWGLOOMWIN10

  Volume ###  Ltr  Label        Fs     Type        Size     Status     Info
  ----------  ---  -----------  -----  ----------  -------  ---------  --------
  Volume 0     D                       DVD-ROM         0 B  No Media           
  Volume 1     E   Macintosh H  HFS    Partition    231 GB  Healthy            
  Volume 2     C   BOOTCAMP     NTFS   Partition    721 GB  Healthy    System  
  Volume 3     F   TEAMXCAMX    FAT    Removable   1937 MB  Healthy            
  Volume 4     G   TEAM1DRIVE3  NTFS   Partition   3725 GB  Healthy  

赞赏的想法和建议。

修改 有一些根本错误的东西。如果我使用 @abelenky 建议的字符串比较的正确语法更改代码,并使用和equals运算符放入匹配的字符串,它仍然返回all。 " IF"没有被忽略,但变量值似乎没有被评估。

IF /I "TEAMXCAMX" == !matchvar! 

1 个答案:

答案 0 :(得分:1)

不是命令运行的忠实粉丝。这有点像英语中的句子。

编辑您的代码以使用我的最佳实践。刚刚使用了输入的文本文件。

Detecting device drive letters...
  Checking drive IDs
DVD-ROM DVD-ROM
Macintosh Macintosh
BOOTCAMP BOOTCAMP
Drive F was found to be TEAMXCAMX and will SOURCE...3
TEAMXCAMX TEAMX
TEAM1DRIVE3 TEAM1DRIVE3
Press any key to continue . . .

输出

perl -F/:/ -ane 'END {print "$x\n"} $x += $F[2]' inputFile

-F/:/  sets colon as the split separator works with -a
-a     autosplit mode with -n splits each line into @F
-n     assume "while (<>) { ... }" loop around program