批处理文件中的通配符,文件夹路径中的通配符,不知道通配符可以是什么。

7

我有一个批处理文件,试图替换一个文件

C:\Users\All Users\Symantec\Symantec Endpoint Protection\12.*\Data\Config

但是星号在不同的计算机上存在差异,因此我无法拥有一个输入列表。

这个批处理文件是在另一个批处理文件中执行的,该文件从命令行调用。

以下是带有星号路径的批处理文件,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"

这是另一个批处理文件,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

批处理文件通过命令行执行。

C:\> C:\copy.bat

问题是,我该如何使批处理文件识别*作为通配符?谢谢。

请提出一个问题。 - ths
2个回答

6
for /d %%a in (
  "C:\Users\All Users\Symantec\Symantec Endpoint Protection\12.*"
) do set "theFolder=%%~fa\Data\Config"

echo %theFolder%

您只能在路径的最后一个元素中包含通配符。
要实现您需要的功能,您需要枚举12.*文件夹并选择其中一个。在这种情况下,选择匹配通配符的最后一个文件夹(执行do子句中的代码时,变量将被覆盖)。

4

试试这个:

@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 从文件夹获取完整路径。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接