如何从Batch中的变量中写出文件名

时间:2016-01-31 01:20:40

标签: batch-file cmd

我需要使用变量的值创建扩展名为.bat的新文件。

例如,我输入" apple"然后脚本应该创建一个名为apple.bat的文件。 我相信脚本应该是

set /p nume=Type the name | fsutil file createnew %nume%.bat 100

但结果是"%nume%.bat"而不是" apple.bat"

1 个答案:

答案 0 :(得分:2)

@ SomethingDark的评论包含关键指针:fsutil命令必须位于单独的行上才能访问新分配的%nume%变量。< / p>

除此之外,您应该使用&(无条件)或&&(仅当左侧的命令成功)才能链接命令; |(管道)只有在您希望左侧命令的输出作为右侧命令的输入时才有意义。这里适用,因为set命令不会产生输出。

因此,请使用以下内容:

set /p name="Type a name: "
fsutil file createnew "%name%.bat" 100

请注意我是如何双引用整个文件名表达式,以确保它与包含嵌入空格的名称一起正常工作。

这两个命令必须位于单独的行上的原因是cmd.exe,Windows命令处理器在%<name>%变量引用 >执行命令。
也就是说,%name%扩展为变量name具有之前的值,之后提示set;如果尚未设置该变量, literal %name%将在命令提示符下打印 ;相比之下,在批处理文件中变量引用将扩展为空字符串

但是,有一种方法可以改变这种行为:如果你打开延迟扩展,你可以使用
!<name>!变量引用将其值扩展延迟,即在访问时进行扩展

  • 通过互动方式,您可以通过使用选项cmd.exe启动新的/V:ON实例来启用此功能。
cmd.exe /V:ON  # start a new cmd.exe instance with delayed expansion enabled
set /p name="Type a name: " && fsutil file createnew "!name!.bat" 100
  • 在批处理文件中,使用setlocal enabledelayedexpansion;请注意,setlocal为您的变量创建了一个脚本本地范围,但这通常是可取的。