Batch file 使用批处理在文件名中包含“空格”

Batch file 使用批处理在文件名中包含“空格”,batch-file,Batch File,我有一个简单的批处理文件,用于分割我大学演讲的音频和视频。使用另一张海报上的代码获取文件: @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

我有一个简单的批处理文件,用于分割我大学演讲的音频和视频。使用另一张海报上的代码获取文件:

   @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
这个问题看起来很明显,但找不到如何在批处理中包含空格和后续内容。我在搜索中看到了用下划线替换空格的方法,但有人能告诉我是否有解决办法吗?

编辑:我编辑了我的答案,以匹配恩多的答案,因为我有一个错误,并且为了不让未来的读者感到困惑

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
注意FOR/F后面的delims=

官方文件:

编辑:我编辑了我的答案,以匹配恩多的答案,因为我有一个错误,并且为了不让未来的读者感到困惑

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
注意FOR/F后面的delims=

官方文件:


请尝试使用双引号和无分隔符:

@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

请尝试使用双引号和无分隔符:

@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

谢谢你的快速回复。这很有效。我将查找delims代码以更好地理解它。谢谢您的快速回复。这很有效。我将查找delims代码以更好地理解它。感谢您解释delims函数,我看到了它的问题所在。@kobigurk-好的,它是批处理,但delims=\r\n无用的代码。感谢您解释delims函数,我看到了它的问题所在。@kobigurk-好的,它是批处理,但是delims=\r\n无用的代码。您想做什么?是否要显示/处理文件名,使其仍然包含空格,还是要用下划线替换空格?批处理在处理闭括号时也可能出现问题。为什么是b/d/b是足够的-和覆盖/d/ad将只选择目录或/a-d省略目录名,如果这是必需的…我使用了另一篇文章中的代码,我将使用它。您是对的,似乎将符号转换为其他符号会提供更好的修复,例如下划线,因为由于某些原因,将结果管道化到ffmpeg的名称中仍然有空格的分隔符。空格也包括制表符、逗号、分号和等号,在经典批处理中是分隔符。处理这些和其他字符时始终存在潜在问题,如!%^&>你想做什么?是否要显示/处理文件名,使其仍然包含空格,还是要用下划线替换空格?批处理在处理闭括号时也可能出现问题。为什么是b/d/b是足够的-和覆盖/d/ad将只选择目录或/a-d省略目录名,如果这是必需的…我使用了另一篇文章中的代码,我将使用它。您是对的,似乎将符号转换为其他符号会提供更好的修复,例如下划线,因为由于某些原因,将结果管道化到ffmpeg的名称中仍然有空格的分隔符。空格也包括制表符、逗号、分号和等号,在经典批处理中是分隔符。处理这些和其他字符时始终存在潜在问题,如!%^&>