使用Batch在文件名中包含“space”

时间:2013-06-07 07:12:12

标签: batch-file

我有一个简单的批处理文件,可以分割我的Unversity讲座的音频和视频。这些文件是使用另一张海报的代码获得的:

   @echo off 
setlocal enableDelayedExpansion 

set DRIVE=%cd:~0,3%
set MYDIR=%DRIVE%ToDo\ToConvert\

for /F %%x in ('dir /B/D %MYDIR%') do (
    echo %%x
    )
pause

文件标有:

PHY2021 (1).mp4
PHY2021 (2).mp4
PHY2021 (3).mp4
etc

脚本的输出是:

PHY2021
PHY2021
PHY2021

问题显而易见,但无法找到如何投入“空间”以及批处理中的内容。我已经看到了在我的搜索中用“下划线”替换“空间”的方法,但有人可以告诉我是否有是一种解决方法吗?

2 个答案:

答案 0 :(得分:4)

试试这个(使用双引号而不使用分隔符):

@echo off 
setlocal 

set "DRIVE=%cd:~0,3%"
set "MYDIR=%DRIVE%ToDo\ToConvert\"

for /F "delims=" %%x in ('dir /B/D "%MYDIR%"') do (
    echo %%x
)
pause

答案 1 :(得分:0)

编辑:我编辑了我的答案以匹配Endoro,因为我在那里犯了一个错误,并且为了不让未来的读者感到困惑。

FOR /F中有一个默认的空格和制表符分隔符集。你需要覆盖它,如下所示:

  @echo off 
setlocal enableDelayedExpansion 

set DRIVE=%cd:~0,3%
set MYDIR=%DRIVE%ToDo\ToConvert\

for /F "delims=" %%x in ('dir /B/D %MYDIR%') do (
    echo "%%x"
    )
pause

请注意delims=之后的FOR /F

来自官方FOR文档:

    delims=xxx      - specifies a delimiter set.  This replaces the
                      default delimiter set of space and tab.