Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 如何在FOR循环中替换变量字符串中的字符?_Batch File - Fatal编程技术网

Batch file 如何在FOR循环中替换变量字符串中的字符?

Batch file 如何在FOR循环中替换变量字符串中的字符?,batch-file,Batch File,我有一个名为NonProd.txt的文本文件,每行包含一个服务器名称,即 c123abc c234abc c345abc cfcd123 etc. 我还有一个批处理文件(如下所示),它从文本文件中读取每一行,从每一行提取3个字符,并将该值保存在变量中。然后我想用变量替换mypath变量中的XXX字符 下面的代码用于读取文本文件、提取服务器名称和提取所需的3个字符,但我无法使用字符串替换,即用提取的3个字符替换mypath中的XXX 有人能提供建议吗 @echo off SET mypath=

我有一个名为NonProd.txt的文本文件,每行包含一个服务器名称,即

c123abc
c234abc
c345abc
cfcd123
etc.
我还有一个批处理文件(如下所示),它从文本文件中读取每一行,从每一行提取3个字符,并将该值保存在变量中。然后我想用变量替换
mypath
变量中的
XXX
字符

下面的代码用于读取文本文件、提取服务器名称和提取所需的3个字符,但我无法使用字符串替换,即用提取的3个字符替换
mypath
中的
XXX

有人能提供建议吗

@echo off

SET mypath=C:\XXX\SYS\exe\folder\folder\

FOR /F %%X IN (NonProd.txt) DO (
  echo ServerName = %%X
  Call Set "SID=%%X"
  Call Set "SID=%%SID:~1,3%%"
  Call Echo SID = %%SID%%

  ECHO mypath = %mypath%

  CALL set mypath=%mypath:XXX=%SID%%

  ECHO newpath = %mypath%
  ECHO.
)

@echo Completed.
pause

按照建议使用延迟扩展的代码

要了解所使用的命令及其工作方式,请打开命令提示符窗口,在其中执行以下命令,并非常仔细地阅读为每个命令显示的所有帮助页面

  • 获取/?
  • 如果/?
  • 设置/?
  • setlocal/?

if/?
包含在此列表中,尽管if未在代码中作为命令的帮助使用if解释了延迟扩展的示例,这些示例通常必须在使用
)定义的任何块中使用。

按照建议使用延迟扩展的代码

要了解所使用的命令及其工作方式,请打开命令提示符窗口,在其中执行以下命令,并非常仔细地阅读为每个命令显示的所有帮助页面

  • 获取/?
  • 如果/?
  • 设置/?
  • setlocal/?

if/?
包含在此列表中,尽管if未在代码中作为命令的帮助使用if解释了延迟扩展的示例,这些示例通常必须在使用
)定义的任何块中使用。

按照建议使用延迟扩展的代码

要了解所使用的命令及其工作方式,请打开命令提示符窗口,在其中执行以下命令,并非常仔细地阅读为每个命令显示的所有帮助页面

  • 获取/?
  • 如果/?
  • 设置/?
  • setlocal/?

if/?
包含在此列表中,尽管if未在代码中作为命令的帮助使用if解释了延迟扩展的示例,这些示例通常必须在使用
)定义的任何块中使用。

按照建议使用延迟扩展的代码

要了解所使用的命令及其工作方式,请打开命令提示符窗口,在其中执行以下命令,并非常仔细地阅读为每个命令显示的所有帮助页面

  • 获取/?
  • 如果/?
  • 设置/?
  • setlocal/?

if/?
包含在此列表中,尽管if未在代码中作为命令的帮助使用if解释了延迟扩展示例,这些示例通常必须在使用
定义的任何块中使用(

我不明白为什么您使用
调用
而不是
启用延迟扩展
。无论如何,请参见以下代码:

@echo关闭
cls
setlocal
(
回声c123abc
回声c234abc
回声c345abc
回声cfcd123
)>%temp%\\u file.tmp
设置mypath=c:\xxx\sys\exe\folder\folder\
回声:
延迟扩展
对于(%temp%\\ u file.tmp)中的/f“delims=“%%a”do(
设置“sid=%%a”
rem::设置“sid=!sid:~1,3!”
设置mypath=%mypath:xxx=!sid:~1,3!%
回显sid:!sid!,服务器名:!sid:~1,3!,新路径:!mypath!
)
端部
回音完成。
退出/b0
输出:

sid:c123abc,服务器名:123,新路径:c:\123\sys\exe\folder\folder\
sid:c234abc,服务器名:234,新路径:c:\234\sys\exe\folder\folder\
sid:c345abc,服务器名:345,新路径:c:\345\sys\exe\folder\folder\
sid:cfcd123,服务器名:fcd,新路径:c:\fcd\sys\exe\folder\folder\
完成


我不明白为什么您使用
调用
而不使用
启用延迟扩展
。无论如何,请参见以下代码:

@echo关闭
cls
setlocal
(
回声c123abc
回声c234abc
回声c345abc
回声cfcd123
)>%temp%\\u file.tmp
设置mypath=c:\xxx\sys\exe\folder\folder\
回声:
延迟扩展
对于(%temp%\\ u file.tmp)中的/f“delims=“%%a”do(
设置“sid=%%a”
rem::设置“sid=!sid:~1,3!”
设置mypath=%mypath:xxx=!sid:~1,3!%
回显sid:!sid!,服务器名:!sid:~1,3!,新路径:!mypath!
)
端部
回音完成。
退出/b0
输出:

sid:c123abc,服务器名:123,新路径:c:\123\sys\exe\folder\folder\
sid:c234abc,服务器名:234,新路径:c:\234\sys\exe\folder\folder\
sid:c345abc,服务器名:345,新路径:c:\345\sys\exe\folder\folder\
sid:cfcd123,服务器名:fcd,新路径:c:\fcd\sys\exe\folder\folder\
完成


我不明白为什么您使用
调用
而不使用
启用延迟扩展
。无论如何,请参见以下代码:

@echo关闭
cls
setlocal
(
回声c123abc
回声c234abc
回声c345abc
回声cfcd123
)>%temp%\\u file.tmp
设置mypath=c:\xxx\sys\exe\folder\folder\
回声:
延迟扩展
对于(%temp%\\ u file.tmp)中的/f“delims=“%%a”do(
设置“sid=%%a”
rem::设置“sid=!sid:~1,3!”
设置mypath=%mypath:xxx=!sid:~1,3!%
回显sid:!sid!,服务器名:!sid:~1,3!,新路径:!mypath!
)
端部
回音完成。
退出/b0
输出:

sid:c123abc,服务器名:123,新路径:c:\123\sys\exe\folder\folder\
sid:c234abc,服务器名:234,新路径:c:\234\sys\exe\folder\folder\
sid:c345abc,服务器名:345,新路径:c:\345\sys\exe\folder\folder\
sid:cfcd123,服务器名
@echo off
setlocal EnableDelayedExpansion
set "mypath=C:\XXX\SYS\exe\folder\folder\"

for /F %%X IN (NonProd.txt) do (
  echo ServerName = %%X
  set "SID=%%X"
  set "SID=!SID:~1,3!"
  echo SID = !SID!

  set newpath=%mypath:XXX=!SID!%

  echo newpath = !newpath!
  echo.
)

echo Completed.
endlocal
pause