我需要使用变量的值创建扩展名为.bat的新文件。
例如,我输入" apple"然后脚本应该创建一个名为apple.bat的文件。 我相信脚本应该是
set /p nume=Type the name | fsutil file createnew %nume%.bat 100
但结果是"%nume%.bat"而不是" apple.bat"
答案 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
为您的变量创建了一个脚本本地范围,但这通常是可取的。