我有一个批处理文件,用于打开一个Excel文件,其文件名中包含空格和日期。
例如:Book 1-27Aug2016
目前,我无法停用分隔符,因此命令 start 不会尝试打开两个文件:Book.xlsx
和1-27Aug2016.xlsx
这是我的代码:
for /f "delims=*" %%# in ('dir /tw /o-d /b "Book 1-*"') do (start excel %%#& exit)
我在下面的SS64 Windows CMD Shell论坛中引用了网页来禁用/修改分隔符,但我还没有取得成功。
最后,一旦我从文件名中删除了空格,批处理就会毫无问题地运行。
我需要在单行批处理代码中修改哪些内容以在Excel中打开文件名中包含空格的Excel文件?
答案 0 :(得分:1)
打开命令提示符窗口,在此窗口for /?
中运行,并仔细阅读所有输出帮助页面。
使用选项/F
的 FOR 命令在空格/制表符上默认拆分字符串。可以使用"tokens=*"
或"delims="
来避免此字符串拆分。 "delims=*"
的用法也适用于文件名,因为没有或带路径的文件名不能包含星号。但是"delims=*"
通常不用于防止将字符串拆分为标记,因为从文本文件读取的字符串,应用程序的输出或环境变量也可能包含1个或更多的星号。
接下来在命令提示符窗口cmd /?
中运行,并至少读取最后一个输出帮助页面,其中说明了文件/文件夹名称中没有或带有路径的文件/文件夹名称字符串中必须包含的字符双引号。一般情况下,建议不带/带路径的文件/文件夹名称始终用双引号括起来。
命令 DIR 返回使用的选项,只返回没有路径的文件的名称,并且始终没有包含双引号,因为在{{1}目录中的命令提示符窗口中运行时可以看到它文件
Book 1-*
首次运行dir "Book 1-*" /A-D /B /O-D /TW
后显示命令 DIR 的帮助。
所以应该使用:
dir /?
for /F "delims=" %%# in ('dir "Book 1-*" /A-D /B /O-D /TW 2^>nul') do ( start "" excel.exe "%%#" & exit /B )
为2^>nul
,其中redirection operator 2>nul
与>
一起转义,以便在运行命令 DIR 上应用此重定向被解释为命令行中无效位置的命令 FOR 的重定向。命令 DIR 会输出错误消息^
以处理 STDERR ,如果它找不到与模式File not found
匹配的当前目录中的任何文件。通过将其重定向到设备 NUL 来抑制此错误消息。
建议将应用程序指定为以文件扩展名开头,即使路径未知也是众所周知的。阅读Where is “START” searching for executables?上的答案以获得解释。
在上面的批处理命令行中,命令 START 之后还有两个双引号,然后才能启动可执行文件的名称。强烈建议使用Book 1-*
,因为命令 START 通常会将参数列表中的第一个双引号字符串解释为可选标题字符串。通过明确指定在这种情况下,空标题字符串有助于避免意外的应用程序执行。有关命令 START 的详细信息,请在命令提示符窗口""
中运行。
最后,最好使用命令 EXIT 和参数start /?
来退出当前批处理文件的处理而不退出整个命令进程。如果使用来自其他批处理文件的命令 CALL 调用此批处理文件,或者从命令提示符窗口中启动此批处理文件,并且在没有参数/B
的情况下使用命令 EXIT ,则处理不会在父批处理文件上继续分别命令提示窗口也会被 EXIT 关闭。如果通过双击批处理文件执行此批处理文件,则/B
和exit
的使用之间没有区别。有关命令 EXIT 的详细信息,请在命令提示符窗口exit /B
中运行。
顺便说一句:命令 START 使用文件关联注册数据,如果它可以找到具有给定名称的可执行文件或脚本,则可以使用已注册的文件扩展名应用程序打开指定文件。
所以也可以使用:
exit /?
现在命令 START 打开* .xslx文件,其中包含与此文件扩展名关联的任何应用程序作为打开它的默认应用程序。
答案 1 :(得分:0)
在最后一个变量周围添加双引号。
for /f "delims=*" %%# in ('dir /tw /o-d /b "Book 1-*"') do (start excel "%%#"& exit)