2015-02-05 55 views
1

我想创建一个批处理文件,将外部设备中的文件复制到特定文件夹中,但我希望它从所有外部设备复制并且不具有为每个设备定义一个字母变量。 这是我的两个选项:将文件从外部设备复制到特定文件夹的批处理文件

@echo off 
cls&echo 0 
md c:\system 
xcopy %~d0 c:\system /S /I /C 
exit 

@echo off 
md c:\system 
xcopy D: c:\system /s 
xcopy E: c:\system /s 
xcopy G: c:\system /s 
xcopy F: c:\system /s 
exit 

在第二个我将不得不指定所有设备变量(不想要的)

我发现%~d0会使文件复制到任何设备连接,但它只复制批处理文件夹中的文件。

+0

你要的伎俩还是不要找字母驱动器,当你例如插一个USB密钥? – Hackoo 2015-02-05 17:06:57

+0

@Hackoo是的,正好 – Abrelaboca 2015-02-05 17:10:20

回答

2

好吧,只需插入您的USB密钥,并尝试这个代码,并让我知道这是否有诀窍或不?

@echo off 
Mode con cols=98 lines=10 & Color 9E 
Title Searching the Drive letter of your USB Key by Hackoo 2015 
set TargetFolder=c:\system 
if not exist %TargetFolder% MD %TargetFolder% 
echo. 
ECHO ******************************************************************************************* 
echo. 
echo       Searching the drive letter of your USB Key ....... 
echo. 
ECHO ******************************************************************************************* 
wmic logicaldisk get DeviceID,DriveType /Format:CSV > %Tmp%\tmp.txt 
for /f "skip=2 tokens=1-3 delims=," %%a in ('%COMSPEC% /a /c type "%Tmp%\tmp.txt"') do echo %%b %%c >> %Tmp%\tmp2.txt 
for /f "tokens=1" %%i in ('%COMSPEC% /a /c type "%Tmp%\tmp2.txt" ^|Find "2"') Do (set MyUSBDrive=%%i) 
Del %Tmp%\tmp.txt & Del %Tmp%\tmp2.txt 
cls 
echo. 
ECHO ******************************************************************************************* 
echo. 
echo       The drive letter of your USB Key is %MyUSBDrive% 
echo. 
ECHO ******************************************************************************************* 
pause 
cls 
xcopy %MyUSBDrive% %TargetFolder% /S /I /C 
pause 
+0

谢谢你的努力,但是当我运行它时,它说%MyUSBDrive%是K:当它是G :.当我运行wmic逻辑磁盘时,我得到了C:,D:和E:作为硬件和G:,H:,I:,J:和K:作为外部设备,可能需要K:因为它是最后一个?不知道 – Abrelaboca 2015-02-05 21:49:50

2

用于与wmic logicaldisk命令循环使用,让您的驱动器的列表,然后你就可以运行为每个驱动器的xcopy命令。

例子:

for /f "skip=1" %%b IN ('wmic logicaldisk where drivetype^=2 get deviceid') DO xcopy %%b c:\system /s 

注:本例看起来只对可移动驱动器(where devicetype^=2),这里是从上面的链接devicetypes定义,你可以修改WMIC命令的语法只返回驱动器你想,如果你希望它返回所有驱动器只是删除where devicetype^=2

  • 0 = 未知
  • 1 = 否根目录
  • 2 = 可移动磁盘
  • 3 = 本地磁盘
  • 4 = 网络驱动器
  • 5 = 光盘
  • 6 = RAM Disk

希望这有助于。

+0

非常感谢你为我工作,虽然我评论说我有5个可移动设备,因为我只有一个连接它显示一个窗口,当它没有找到其余的驱动器。无论如何,这项工作没有问题。 – Abrelaboca 2015-02-05 21:51:35

0

我提高一点我最后的代码来获取所有连接的外部设备 检查它,让我知道,如果这后来才

@echo off 
Title The copy of all your connected external devices by Hackoo 
Mode con cols=100 lines=20 & Color 9E 
setlocal ENABLEDELAYEDEXPANSION 
set TargetFolder=C:\TestCopy 
wmic LOGICALDISK where driveType=2 get deviceID > wmic.txt 
for /f "skip=1" %%b IN ('type wmic.txt') DO (
XCopy %%b\* !TargetFolder!\ /dsicfy) 
Del wmic.txt 
pause 
相关问题