windows - 将子程序代码导入 FOR 循环
问题描述
我有一个小批处理文件,旨在从包含音轨的文件夹中读取文件名并将它们输出到播放列表中。该程序运行良好,但我在将“写入轨道名称”代码放入 FOR 循环时遇到了麻烦——我不得不将其保留为子例程,否则批处理文件会过早退出。有没有办法将这三行移到 FOR 循环中?
@echo off
%~d1
cd %1
for %%* in (.) do set FOLDER="%%~nx*"
set PLAYLIST=%FOLDER%.m3u
for /f "tokens=*" %%g in ('dir /b *.flac *.mp3') do (
call :WRITE_TRACK_NAMES "%%g"
)
goto :CHECKOUT
:WRITE_TRACK_NAMES
set "TRACK=%~nx1"
echo %TRACK% >> %PLAYLIST%
goto :EOF
:CHECKOUT
exit /b
解决方案
@echo off
setlocal
@rem Change drive and path.
cd /d %1
for /d %%A in (.) do set "FOLDER=%%~nxA"
@rem If in drive root, . is returned.
if "%FOLDER%" == "." exit /b 1
@rem Create m3u file or erase m3u file content.
2> "%FOLDER%.m3u" echo.
@rem Find and sort audio files and add filename to m3u file.
for /f "tokens=*" %%A in ('dir /b *.flac *.mp3 ^| sort') do >> "%FOLDER%.m3u" echo(%%~nxA
exit /b
- 用于
setlocal
防止cd
和 变量影响 CMD 进程的全局范围。 - 使用
/d
参数 withcd
允许在更改路径时切换驱动器。 - 在命令中使用
sort
超过 1 个文件模式dir
。 - 建议不要使用脚本的所有参数或称为标签
%%*
的for
变量名。%*
- 删除
PLAYLIST
了名称,因为没有什么用处。 - 创建或擦除 m3u 文件以防止重复文件名与附加写入。
推荐阅读
- reactjs - React.JS:嵌套过滤器/映射数组
- python - NLTK wordnet 不包含词汇术语 - Python
- qt - 无法初始化 GLX -- 虚拟机上的 CLI
- wordpress - 使用页面访问令牌从客户端进行 Facebook Graph API 调用是否安全?
- python - 如何将 csv 文件添加到 Django 模型中
- cmake - CMake 导出包未按预期工作
- python - bigquery,extract_table AttributeError:“客户端”对象没有属性“数据集”
- javascript - 视频滑块停止的js代码
- c# - 反序列化服务器返回字符串到 JSON
- c# - Farseer (Box2D) - 通过使用双精度或小数而不是浮点数来增加最大世界大小?