将环境变量设置为for循环%% i变量(批处理脚本)

问题描述 投票:2回答:1

这是我写过的第一个批处理脚本。我正在尝试遍历当前文件夹,查找所有.mp3文件,然后为每个mp3文件创建一个文件夹,其标题与文件相同,但没有文件扩展名(然后将文件移动到其各自的文件夹中,添加名为ffmpeg将它们分成更短的块,但我还没有达到这一点)。

我找到了一个基本上正是我需要做的方法here。我还发现了问题herehere有哪些显示如何将环境变量赋值给for循环变量,但是它不适用于我。

这是我的代码。

@ECHO OFF 
cd C:\test
for %%i in (*.mp3) do (  
  echo %%i
  set episodeName=%%i
  set episodeName=!episodeName:~0,-4!
  echo !episodeName!
  mkdir !episodeName!
)

这是我的输出。

C:\test>"file splitter.bat"
171 Election.mp3
!episodeName!
172 24 Hours at the Golden Apple.mp3
!episodeName!
A subdirectory or file !episodeName! already exists.

我做什么stoopid明显的错误?

windows batch-file
1个回答
1
投票

正如Mangoo所说,最初的问题是enabledelayedexpansion被关闭,这意味着你的!variables!将不会被解析。此外,有一个问题,mkdir没有把参数放在引号中,这意味着如果你有一个名为'Episode 1'的剧集,那么它会尝试制作文件夹'Episode'和'1'而不是单个文件夹。有了这些修复,将一个额外的move命令添加到循环中,并在末尾添加pause来检查输出,最后得到以下内容....

@echo off
setlocal enabledelayedexpansion
cd C:\test
for %%i in (*.mp3) do (  
    echo %%i
    set episodeName=%%i
    set episodeName=!episodeName:~0,-4!
    echo !episodeName!
    mkdir "!episodeName!"
    move "%%i" "!episodeName!\%%i"
)
pause

如果你要经常这样做,我可能还建议使用Foobar2000,它既是一个强大的,可定制的Windows音频播放器,还包括一个瑞士军刀,其他工具用于管理标签,转换音频,以及当然,file operations!购买和下载新曲目后,我将此用于我自己的音乐库。由于它可以轻松读取ID3标签,我可以告诉它按艺术家名称制作文件夹并重命名文件以反映曲目名称。如果您的曲目被正确标记,这比仅查看文件名更具灵活性。

© www.soinside.com 2019 - 2024. All rights reserved.