Set oShell = CreateObject("WScript.Shell")
strCommand = oShell.Run("Xcopy ""p:\"" ""d:\12"" /S /Y", 0, True)
If strCommand <> 0 Then
MsgBox "Error: Not_Copy" & strCommand
Else
MsgBox "Copy_Done"
End If
我使用上面的vb脚本将我的所有数据从笔式驱动器复制到“d:\ 12”文件夹。我有一个问题。
很多时候,我在pendrive中有相同的文件夹和相同的文件夹路径,例如“p:\”中的“java-setup.exe”以及“d:\ 12”。 当我播放这个VBScript文件时,它会替换所有文件,浪费了大量时间。
是否有任何选项可以让它停止替换文件(跳过已经复制的文件),并只关注那些未复制的文件?
我是脚本,初学者级别的新手。所以请直接编码,不是这样,
$srcdir = "\\server\source\";
$destdir = "C:\destination\";
$files = (Get-ChildItem $SrcDir -recurse -filter *.* | where-object {-not ($_.PSIsContainer)});
$files|foreach($_){
if (!([system.io.file]::Exists($destdir+$_.name))){
cp $_.Fullname ($destdir+$_.name)
};
很多时候我无法理解它。
我的笔驱动器路径是“p:\”,我必须复制的文件是“d:\ 12”
请提供脚本。
答案 0 :(得分:1)
我找不到能够满足你需要的XCOPY
开关。不过,这个VBScript应该可以工作。
With CreateObject("Scripting.FileSystemObject")
For Each File In .GetFolder("P:\").Files
If Not .FileExists("D:\12\" & File.Name) Then
.CopyFile File.Path, "D:\12\" & File.Name
End If
Next
End With
答案 1 :(得分:1)
是的,xcopy并不像其他人所说的那样支持。但是有批处理命令可以。
将其放入(“CopyWithoutReplace.bat”)
For %%F In ("P:\*.*") Do If Not Exist "D:\12\%%~nxF" Copy "%%F" "D:\12\%%~nxF"
您修改后的脚本:
Set oShell = CreateObject("WScript.Shell")
strCommand = oShell.Run("P:\CopyWithoutReplace.bat", 0, True)
If strCommand <> 0 Then
MsgBox "Error: Not_Copy" & strCommand
Else
MsgBox "Copy_Done"
End If
您也可以使用Robocopy:
Robocopy或“Robust File Copy”是命令行目录复制命令。它作为Windows资源工具包的一部分提供,从Windows NT 4.0开始,作为Windows Vista,Windows 7和Windows Server 2008的标准功能引入。
$srcdir = "\\server\source\";
$destdir = "C:\destination\";
$files = (Get-ChildItem $SrcDir -recurse -filter *.* | where-object {-not ($_.PSIsContainer)});
$files|foreach($_){
if (!([system.io.file]::Exists($destdir+$_.name))){
cp $_.Fullname ($destdir+$_.name)
};
最后:Here is an entire SO Thread on copying without replacing.