我有一个batch file,试图replace中的文件
C:\Users\All Users\Symantec\Symantec Endpoint Protection\12.*\Data\Config
但是,这个*因计算机而异,所以不是我可以有一个input列表
该batch file在另一个batch file中执行,该文件从命令行调用。
这里是带*path的batch file, C:\ script.bat
@echo off if exist "C:\Users\All Users\Symantec\Symantec Endpoint Protection\12.*\Data\Config\SyLink.xm_" del /Q "C:\Users\All Users\Symantec\Symantec Endpoint Protection\12.*\Data\Config\SyLink.xm_" ren "C:\Users\All Users\Symantec\Symantec Endpoint Protection\12.*\Data\Config\SyLink.xml" sylink.xm_bak del /Q "C:\Users\All Users\Symantec\Symantec Endpoint Protection\12.*\Data\Config\SyLink.xml" echo. echo Copying new SyLink.xml echo. copy C:\SyLink.xml "C:\Users\All Users\Symantec\Symantec Endpoint Protection\12.*\Data\Config" echo. echo Deleting temp files del /Q "c:\SyLink.xml"
这是另一个batch file, C:\ copy.bat ,它调用第一个文件,即C:\ script.bat
xcopy C:\sylink.xml \\10.10.10.10\c$ xcopy C:\sylink.xml \\10.10.10.11\c$ D:\pstools\psexec.exe @C:\clients.txt -c C:\Script.bat
C:\ clients.txt
10.10.10.10 10.10.10.11
batch file是通过命令行执行的
C:\> C:\copy.bat
问题是,我如何使这个batch file工作,以便识别*作为通配符?
谢谢
for /d %%a in ( "C:\Users\All Users\Symantec\Symantec Endpoint Protection\12.*" ) do set "theFolder=%%~fa\Data\Config" echo %theFolder%
您只能在路径的最后一个元素中包含通配符。
要做你所需要的,你必须枚举12.*
文件夹并选择一个。 在这种情况下,选择匹配通配符的最后一个文件夹(随着do
子句中的代码被执行,变量被覆盖)
尝试这个:
@echo off For /D %%D in ("C:\Users\All Users\Symantec\Symantec Endpoint Protection\12.*") Do ( Set "Dir=%%~fD\Data\Config" ) If exist "%Dir%\SyLink.xm_" Del /q %Dir%\SyLink.xm_" Ren "%Dir%\SyLink.xml" sylink.xm_bak Del /q "%Dir%\SyLink.xml" echo. echo Copying new SyLink.xml echo. copy C:\SyLink.xml "%Dir%" echo. echo Deleting temp files Del /q "c:\SyLink.xml"
/ D开关找到文件夹。
%%〜fD从文件夹获取完整路径。