我在这里遗漏了一些东西,但我无法看到它。我确信这个变量会被调用,但我没有得到它。
我的目标是构建一个通用脚本,将文件从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!
答案 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