Batch file 文件名和文件夹名,其中包含在批处理文件脚本中用作变量的空格

Batch file 文件名和文件夹名,其中包含在批处理文件脚本中用作变量的空格,batch-file,Batch File,我正在编写代码,以便将文件夹中的*.mp3文件扩孔并移动到上面的文件夹中,并将文件夹名称添加到文件名中。这段代码似乎适用于不包含空格的文件夹名称,但在其他情况下则不行。我该怎么办 windows8-bathfile 我的代码: 这将调用(renamemp3.bat): 这将调用(renamemp3.bat): 您应该查看是否有/arg变量修饰符~请参见调用/?和for/?对已提供的脚本进行了一些更改 主脚本: @For/D%%A In(*)执行@Call“%UserProfile%\Docume

我正在编写代码,以便将文件夹中的*.mp3文件扩孔并移动到上面的文件夹中,并将文件夹名称添加到文件名中。这段代码似乎适用于不包含空格的文件夹名称,但在其他情况下则不行。我该怎么办

windows8-bathfile 我的代码:

这将调用(renamemp3.bat):

这将调用(renamemp3.bat):


您应该查看是否有/arg变量修饰符
~
请参见
调用/?
for/?

对已提供的脚本进行了一些更改

主脚本:

@For/D%%A In(*)执行@Call“%UserProfile%\Documents\renamemp3.bat”“%%~fA”
重新命名EMP3.bat

@Echo关闭
如果/I不是“%CD%”==%1(按%12>Nul&&(设置)| | |退出/B)
对于(*.mp3)中的%%A,请移动“%%A”“..\%~n1(%%~nA)%%~xA”
如果“%\%”==“T”(设置“\=”&PopD)
后藤:EOF

以下是一些可能有帮助的建议:

  • 在文件和目录路径周围加上引号
    “”
  • 如果变量(如
    %%~f
    )和参数引用(如
    %%~1
    )可能包含封闭的
    ,请使用
    ~
    修饰符
  • 避免相对路径,特别是当涉及多个批处理文件时(例如,由
    调用运行)。考虑使用<代码> ~f>代码>修改< <代码> >变量和参数引用,返回完全的绝对路径。
  • 要检索文件或目录的纯基名称和扩展名,请始终明确指定变量或参数引用的
    ~n
    ~x
    修饰符(或组合:
    ~nx
  • 考虑使用和临时更改工作目录。(不过,如果您坚持使用
    cd
    ,请添加
    /D
    开关,以便在必要时也更换驱动器。)
  • 使用以下语法:
    设置“VAR=Value”
    ;因此,引号不是值的一部分。仅当读取值时,才将其用引号括起来。(我知道您在代码中没有使用
    set
    ,但我想提一下这一点。)
将这些规则应用于您的代码后,可能会出现以下情况:

主批处理文件:

@echo关闭
对于(*)中的/D%%f,请调用“c:\users\sina\documents\renamemp3.bat”“%%~ff”
子脚本重命名emp3.bat

rem//这将替换“cd/D”%~1”`:
pushd“%~1”
如果错误级别1转到结束
对于(*.mp3)中的%%f,请移动“%%~f”“..\%%~nx1(%%nxf).mp3”
rem//这将替换'cd..':
邻苯二胺
:结束
文件
renamemp3.bat
可以简化:

rem/*`&&&`运算符只允许在以下情况下执行以下命令(块):
rem前一个成功,因此其退出代码等于零:*/
推送“%~1”和(
对于(*.mp3)中的%%f,请移动“%%~f”“..\%%~nx1(%%nxf).mp3”
邻苯二胺
)
:结束
甚至像这样:

rem//使用绝对路径可直接避免更改工作目录:
对于“%$1\*.mp3”中的%%f,请移动“%%f”“%%f1(%%nxf).mp3”
:结束

我应该在哪里添加引号?移动“%%f”..\%1(%%f).mp3”无效!
@ECHO OFF
for /D %%f in (*.) do call c:\users\sina\documents\renamemp3.bat "%%f"
cd %1
if ERRORLEVEL 1 goto end
for %%f in (*.mp3) do move %%f "..\%1(%%f).mp3"
cd ..
:end
@ECHO OFF
for /D %%f in (*.) do call c:\users\sina\documents\renamemp3.bat "%%~ff"
@Echo off&Setlocal
cd /d "%~1"
if ERRORLEVEL 1 goto end
for %%f in (*.mp3) do move "%%f" "..\%~n1(%%~nxf).mp3"
cd ..
:end