从不同文件夹中的相同路径复制变量文件

时间:2016-02-10 16:23:59

标签: batch-file xcopy

下午好,

我正在尝试使用批处理将每个用户的签名文件夹中的文件(具有相同的扩展名但不同的文件名)复制到转储文件夹中。

例如;

我的C:驱动器上有3个用户的漫游配置文件,用户名是首字母,后跟一个他们都有的标签(initials_1);

C:\Users\abc_1\AppData\Roaming\Microsoft\Signatures\test.htm
         def_1\AppData\Roaming\Microsoft\Signatures\example.htm
         ghi_1\AppData\Roaming\Microsoft\Signatures\Signature.htm

我希望能够将3 .htm文件复制到我的新文件夹C:\Users\Admin\Signatures

在这种情况下,用户名是首字母,大约有100个不同的用户,所以我试图避免手动操作。

如果可以使用批次或者我必须使用Vbs,请告诉我吗?

谢谢。

1 个答案:

答案 0 :(得分:0)

你可以试试这个:

@echo off
setlocal EnableDelayedExpansion
FOR /D %%G in ("C:\Users\*") DO (
    if exist "%%G\AppData\Roaming\Microsoft\Signatures" (
        set "name=%%~nxG"
        if not "x!name:_1=!"=="x!name!" (
            copy "%%G\AppData\Roaming\Microsoft\Signatures\*.htm" "C:\Users\Admin\Signatures\!name!_*.htm"
        )
    )
)

FOR /D %%G in ("C:\Users\*") DO (...)表示括号内的代码将在C:\ Users目录中的每个(非递归的,否则使用/D /R)目录中执行。子目录的完整路径存储在%% G中,例如C:\Users\abc_1

if exist "%%G\AppData\Roaming\Microsoft\Signatures" (...)表示只有%% G目录包含Signatures文件夹时,才会执行这些括号内的代码。

set "name=%%~nxG"存储名称变量中%% G目录的名称和扩展名(如果您的目录名称包含.),所以只有abc_1,而不是{{} 1}}在它面前。

C:\Users\通过比较名称与名称本身删除的if not "x!name:_1=!"=="x!name!" (...)来检查名称是否包含_1。您需要_1而不是!,因为您的内括号,这就是启用%的原因。有关延迟扩展的更多信息,请阅读this。在代码块之外,这将像DelayedExpansion

一样工作

该副本只是将所有%variableName:StringToFind=StringToReplaceItWith%个文件从每个用户的签名目录复制到管理员的签名目录,但.htm(其中包含例如!name!)前置。< / p>