从不同文件夹中的相同路径复制变量文件
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
) .
下午好,
我正在尝试使用批处理将每个用户的签名文件夹中的文件(扩展名相同但文件名不同)复制到转储文件夹中。
例如;
我的 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
) .