使用批处理文件中的输入创建新的,保存为不同的名称批处理文件

时间:2012-06-18 05:46:41

标签: file batch-file

我正在尝试创建一个批处理文件来输入3个数据并使用该数据创建另一个批处理文件。只需创建它,然后停止。批量映射为用户提供了几个网络驱动器,这些驱动器不知道如何操作 我有一个“master.bat”并使用记事本我使用“替换”来填写“用户名”“密码”和“驱动路径”。我想我会尝试将变量输入“master.bat”,为该用户创建“custom.bat”。
我在这里得到了很多帮助,直到最后一步。除最后一部分外,一切正常。现在我已经将所有变量和模板放入其中,如何获得第一个批处理文件以创建cuctomized输出作为可用文件,我可以将用户发送到的地方运行它。

2 个答案:

答案 0 :(得分: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

必须注意关闭括号和为生成的批处理文件中可能需要的语法保留的几个字符。但这种方法完全是自足的,尽管维护起来有点困难。

答案 1 :(得分: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