如何打开一个* .xlsx文件,该文件包含由Excel中的命令DIRfind的文件名中的空格?
我有一个batch file,打开一个Excel文件,其文件名中包含空格和date。
例如: Book 1-27Aug2016
目前,我无法禁用分隔符,以便命令启动不会尝试打开两个文件: Book.xlsx
和1-27Aug2016.xlsx
这是我的代码:
for /f "delims=*" %%# in ('dir /tw /od /b "Book 1-*"') do (start excel %%#& exit)
我在下面的SS64 Windows CMD Shell论坛中引用了网页来禁用/修改分隔符,但是我还没有经历成功。
/ f文件
最后,一旦我从文件名删除空间,批处理运行没有任何问题。
我需要修改单行批处理代码以在Excel中打开文件名中带有空格的Excel文件?
打开命令提示符窗口,在此窗口中运行for /?
并仔细阅读所有输出帮助页面。
带有选项/F
命令FOR在空间/选项卡上默认分割一个string。 可以使用"tokens=*"
或"delims="
来避免这种string分裂。 "delims=*"
的用法也适用于文件名,因为没有或不带有path的文件的名称不能包含星号。 但是"delims=*"
通常不用于防止将string拆分为标记,因为从文本文件中读取的string,应用程序的输出或环境variables也可以包含一个或多个星号。
接下来在命令提示符窗口中运行cmd /?
并至less读取最后输出的帮助页面,其中解释了文件/文件夹名称中的哪些字符没有或具有path,文件/文件夹名称string必须用双引号括起来。 一般来说,build议将不带/带path的文件/文件夹名称放在双引号中。
命令DIR返回使用的选项只是没有path的文件的名称,并且始终没有包围双引号,因为它可以在运行在具有Book 1-*
文件的目录中的命令提示符窗口中看到
dir "Book 1-*" /AD /B /OD /TW
在第一次运行dir /?
显示命令DIR的帮助。
所以使用应该是:
for /F "delims=" %%# in ('dir "Book 1-*" /AD /B /OD /TW 2^>nul') do ( start "" excel.exe "%%#" & exit /B )
2^>nul
是2>nul
,因此redirect操作符 >
被^
转义以在运行命令DIR上应用此redirect,而不是在命令行中的无效位置被解释为命令FOR的redirect。 如果在当前目录中找不到任何匹配模式Book 1-*
文件,则命令DIR输出错误消息File not found
来处理STDERR 。 通过将其redirect到设备NUL来抑制此错误消息。
如果知道即使path未知,最好指定应用程序以文件扩展名开头。 阅读答案在哪里“开始”search可执行文件? 作为解释。
在上面的批处理命令行中,在命令START之后还有两个双引号,在要启动的可执行文件的名称之前。 强烈build议使用""
因为命令START常常将参数列表中的第一个双引号string解释为可选标题string。 通过明确指定,在这种情况下,空标题string有助于避免意外的应用程序执行 有关命令START在命令提示符窗口start /?
。
最后使用带参数/B
命令EXIT退出刚刚处理的当前batch file而不退出整个命令处理。 如果使用另一个batch file中的命令CALL调用此batch file,或者从命令提示符窗口中启动该命令并使用不带参数/B
命令EXIT ,则处理将不会继续,在父batch file中,分别用EXITclosures命令提示符窗口,太。 如果通过双击batch file执行该batch file,则exit
和exit /B
之间没有区别。 有关命令EXIT在命令提示符窗口中运行的详细信息,请参阅exit /?
。
顺便说一下:如果命令START能够使用文件关联注册数据find一个具有给定名称的可执行文件或脚本来打开指定的具有文件扩展名的注册应用程序的文件。
所以也可以使用:
for /F "delims=" %%# in ('dir "Book 1-*" /AD /B /OD /TW 2^>nul') do ( start "" "%%#" & exit /B )
现在命令START打开* .xslx文件,并将与该文件扩展名关联的任何应用程序作为打开它的默认应用程序。
围绕最后一个variables添加双引号。
for /f "delims=*" %%# in ('dir /tw /od /b "Book 1-*"') do (start excel "%%#"& exit)