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

Copying variable files from the same path in different folders

下午好,

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

例如;

我的 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?

谢谢。

你可以试试这个:

@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,没有C:\Users\在前面。

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

副本只是将每个用户的签名目录中的所有 .htm 文件复制到管理员的签名目录,但在其前面加上 !name!(例如包含 abc_1) .