下午好,
我正在尝试使用批处理将每个用户的签名文件夹中的文件(具有相同的扩展名但不同的文件名)复制到转储文件夹中。
例如;
我的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,请告诉我吗?
谢谢。
答案 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>