使用批处理文件中的循环将文件夹的所有元素复制到另一个文件夹中

时间:2016-10-29 07:00:25

标签: windows batch-file copy

我想使用批处理脚本将文件夹的所有文件复制到其他文件夹中。说,我有两个名为folder1和folder2的文件夹。这两个文件夹位于C:\ Users \ xyz中。我想将另一个文件夹(例如,位于C:\ Users \ abc \ def中的folder3)的元素复制到这两个文件夹中。我制作了以下脚本但没有复制任何内容。我的样本批处理文件如下:

public class GenericsPuzzler {
    interface Holder<H extends Holder<H, T>, T> {}
    interface HolderFactory<H extends Holder<H, T>, T> {}

    static <T> HolderFactory<?, T> factory(Class<T> clazz) {
        return null;
    }
    static <T> HolderFactory<?, T> factory2() {
        return null;
    }
    static <T> HolderFactory<?, T> factory3(T thing) {
        return null;
    }

    public static <H extends Holder<H, T>, T> void process(HolderFactory<H, T> factory) {}

    public static <T> void puzzler(Class<T> clazz, T thing) {
        // Compile Errors
        process(GenericsPuzzler.factory(clazz));
        process(GenericsPuzzler.factory3(thing));

        // Everything below works
        process(GenericsPuzzler.<T>factory(clazz));
        process(GenericsPuzzler.<T>factory2());
        process(GenericsPuzzler.<T>factory3(thing));
        process((HolderFactory<?, T>) GenericsPuzzler.factory(clazz));
        process((HolderFactory<?, T>) GenericsPuzzler.factory2());  // Warning
        process((HolderFactory<?, T>) GenericsPuzzler.factory3(thing));
        HolderFactory<?, T> factory = null;
        process(factory);  // Works
    }
}

批处理文件有什么问题吗?

2 个答案:

答案 0 :(得分:1)

 xcopy /s C:\Users\abc\def\folder3\*.* C:\Users\xyz\folder%%A\

其中*.*是一个合适的文件掩码,目标名称中的最后\告诉cmd目标是一个目录。

答案 1 :(得分:0)

我建议在批处理文件中使用此命令行:

for /L %%A in(1,1,2) do %SystemRoot%\System32\xcopy.exe "C:\Users\abc\def\folder3" "C:\Users\xyz\folder%%A\" /C /G /H /I /K /R /Q /S /Y >nul

如果实际路径包含1个或多个空格或需要双引号的其他特殊字符,我用双引号括起两个目录路径。通过在命令提示符窗口cmd /?中运行输出的最后一个帮助页面上的最后一段输出,在整个目录/文件名周围需要目录/文件名中双字引号中的字符。

目标路径以反斜杠结尾,以使控制台应用程序xcopy清楚地表明目标是目录而不是文件。与冗余/I一起创建目标目录(如果尚未存在)。

有关xcopy上使用的选项的详细信息,请打开命令提示符窗口并运行xcopy /?。这将在命令提示符窗口中输出此控制台应用程序的帮助。在运行命令或控制台应用程序的Windows上,/?作为参数输出,通常是命令/应用程序的帮助。

注意:从一个用户个人资料目录复制到另一个用户个人资料目录需要本地管理员权限。默认情况下,每个用户配置文件目录都受保护,以便独占使用所属用户。因此,我建议打开命令提示符窗口并在此窗口中执行:

for /L %A in(1,1,2) do %SystemRoot%\System32\xcopy.exe "C:\Users\abc\def\folder3" "C:\Users\xyz\folder%A\" /C /G /H /I /K /R /S /Y

根据批处理文件中的要求,没有%A(安静复制)且没有{{1},您可以在命令行上查看是否仅使用%%A而不是/Q。 (将成功消息重定向到设备 NUL 以禁止它们)。或者当它不起作用时,您可以看到它不起作用的原因,因为可以在命令提示符窗口中运行命令或批处理文件时查看错误消息,而不是双击批处理文件,因为控制台窗口保持打开状态