Olek Blog
Home
# 使用robocopy复制文件夹 ```powershell # 定义源文件夹和目标文件夹 $source = "C:\path\to\source\folder" $destination = "C:\path\to\destination\folder" # 定义要排除的子文件夹名称 $excludeDirs = @("ExcludeFolder1", "ExcludeFolder2") # 构建排除子文件夹的参数 $excludeParams = $excludeDirs | ForEach-Object { "/XD `"$source\$_`"" } # 将排除参数数组转换为字符串 $excludeParamsString = $excludeParams -join " " # 构建 robocopy 命令 $robocopyCmd = "robocopy `"$source`" `"$destination`" /E $excludeParamsString" # 执行 robocopy 命令 Invoke-Expression $robocopyCmd ``` ## 代码说明 - 定义源文件夹和目标文件夹:指定要复制的源文件夹路径和目标文件夹路径。 - 定义要排除的子文件夹名称:创建一个数组,包含需要排除的子文件夹名称。 - 构建排除子文件夹的参数:使用 ForEach-Object 循环,将每个子文件夹名称转换为 robocopy 的排除参数格式。 - 将排除参数数组转换为字符串:使用 -join 运算符将排除参数数组连接成一个字符串。 - 构建 robocopy 命令:将源文件夹、目标文件夹和排除参数组合成一个完整的 robocopy 命令字符串。 - 执行 robocopy 命令:使用 Invoke-Expression 执行构建好的 robocopy 命令。 假设源文件夹为 C:\source,目标文件夹为 C:\destination,并且需要排除子文件夹 ExcludeFolder1 和 ExcludeFolder2,则构建的 robocopy 命令如下: ```powershell robocopy "C:\source" "C:\destination" /E /XD "C:\source\ExcludeFolder1" "C:\source\ExcludeFolder2" ``` 关于记录日志信息参数 - /NFL (No File List):不记录文件日志。 - /NDL (No Directory List):不记录目录日志。 - /NJH (No Job Header):不记录作业头信息。 - /NJS (No Job Summary):不记录作业摘要。 示例 假设源文件夹为 C:\source,目标文件夹为 C:\destination,并且需要排除子文件夹 ExcludeFolder1 和 ExcludeFolder2,则构建的 robocopy 命令如下: ```powershell robocopy "C:\source" "C:\destination" /E /XD "C:\source\ExcludeFolder1" "C:\source\ExcludeFolder2" /NFL /NDL /NJH /NJS ``` 这个命令将复制 C:\source 文件夹到 C:\destination,排除 ExcludeFolder1 和 ExcludeFolder2 子文件夹,并且不会记录文件、目录、作业头信息和作业摘要日志。 通过这种方法,可以有效地实现文件夹的复制,并且避免生成不必要的日志。