我正在尝试创建一个批处理文件来输入 3 条数据并使用该数据创建另一个批处理文件。只需创建它,然后停止。该批处理为不知道如何操作的用户映射了几个网络驱动器。
我有一个“master.bat”并使用记事本使用“替换”来填写“用户名”“密码”和“驱动器路径”。我想我会尝试将变量输入到“master.bat”中,为该用户创建一个“custom.bat”。
我在这里得到了很多帮助,直到最后一步。除了最后一部分,一切都在工作。现在我有了所有的变量以及一个可以放入它们的模板,
问问题
1139 次
2 回答
2
一种方法是以文件形式使用您的模板,并用您的实际值替换其中的占位符:
setlocal enabledelayedexpansion
for /f %%L in (template.cmd) (
set "Line=%%L"
set "Line=!Line:[username]=!username!"
...
>network-drives.cmd echo !Line!
)
这假定[username]
模板中的占位符和定义的相应变量。
但是,如果我使用从文件中批量读取的数据,我总是会有点焦虑。当我最近不得不从另一个创建批处理文件时,我采用了以下路线:
(
echo @echo off
echo net use !drivepath! \\server\share "/user:!username!" "!password!"
echo net use !drivepath2! \\server\share2 "/user:!username!" "!password!"
) > network_drives.cmd
必须注意诸如右括号和为生成的批处理文件中可能需要的语法保留的几个字符之类的事情。但是这种方法是完全独立的,尽管维护起来有点困难。
于 2012-06-18T05:50:22.093 回答
1
在批处理文件中嵌入模板很简单。有多种方法可以做到这一点。一种是简单地在每个模板行前加上:::
. 我之所以选择该序列,是因为:
它已经用作批标签,并且::
经常用作批注释。
延迟扩展可用于自动搜索和替换!
如果要将它们包含在输出中,则只需担心 3 个特殊字符。原始问题可能不需要这些特殊字符。但最好知道如何在一般意义上处理它们。
感叹号文字!
必须被转义或替换
如果插入符号文字^
出现在带有感叹号的行上,则可以对其进行转义或替换。但是如果没有感叹号就一定不能转义。插入符号替换总是安全的。
使用替换来开始一行:
@echo off
setlocal
::The following would be set by your existing script code
set drivePath=x:
set username=rumpelstiltskin
set password=gold
::This is only needed if you want to include ! literals using substitution
set "X=!"
::This is only needed if you want to include ^ literal on same line
::containing ! literal
set "C=^"
::This is only needed if you want to start a line with :
set ":=:"
::This is all that is needed to write your output
setlocal enableDelayedExpansion
>mapDrive.bat (
for /f "tokens=* delims=:" %%A in ('findstr "^:::" "%~f0"') do @echo(%%A
)
::----------- Here begins the template -----------
:::@echo off
:::net use !drivePath! \\server\share "/user:!username!" "!password!"
:::!:!: Use substitution to start a line with a :
:::!:!: The following blank line will be preserved
:::
:::echo Exclamation literal must be escaped ^! or substituted !X!
:::echo Caret with exclamation must be escaped ^^ or substituted !C!
:::echo Caret ^ without exclamation must not be escaped
于 2012-06-18T12:12:05.420 回答