我被分配了一个任务,用艺术家和歌名来编目歌曲。 我收到了歌曲文件,不得不通过分隔符(' - ')(空格连字符空格)将文件中的艺术家名称取出来。
歌曲:
Artist.A - 歌曲1.wav
艺术家B - 歌曲2.wav
艺术家--- C - 歌曲$ B.mp3
艺术家$ D - song-4.mp3
dir /b "C:\songs\" | for /f "delims=" %a ('findstr /c:" - "') do ( echo %a )
它收录C:\ songs \下的歌曲,并确保他们得到" - "在他们中。
我仍然很擅长批量阅读“男人”#39; ' for'的页面,但我找不到答案。
我也抬起头来发现与%a: - :^&REM #%
有关,但无法得到它工作。
希望有人可以帮助我。
答案 0 :(得分:1)
extension String {
var isValidUrlNaive: Bool {
var domain = self
guard domain.count > 2 else {return false}
guard domain.trim().split(" ").count == 1 else {return false}
if self.containsString("?") {
var parts = self.splitWithMax("?", maxSplit: 1)
domain = parts[0]
}
return domain.split(".").count > 1
}
}
您需要更改@ECHO Off
SETLOCAL ENABLEDELAYEDEXPANSION
SET "sourcedir=U:\sourcedir"
FOR /f "delims=" %%a IN (
'dir /b /a-d "%sourcedir%\* - *" '
) DO (
SET "fulltitle=%%a"
SET "song=!fulltitle:* - =!"
CALL SET "artist=%%fulltitle: - !song!=%%"
ECHO artist=!artist!
ECHO song =!song!
ECHO TITLE =!fulltitle!
ECHO ------------------
)
GOTO :EOF
的设置以适合您的具体情况。
在sourcedir
基本格式dir
中执行/b
命令,不带目录,并将找到的名称分配给/a-d
。
将%%a
复制到%%a
以允许子字符串。已调用fulltitle
以允许访问变量的运行时值。找到每个名称后,标题将成为delayedexpansion
之后显示的完整标题的一部分,因此将“任何 - ”替换为 nothing 。然后使用-
替换“ - thetitle ”,以允许替换的部分变为可变,留下艺术家名称。
报告结果。
答案 1 :(得分:0)
for /F
command使用字符来分割字符串,而不是字符串。 findstr
command不会拆分字符串,它总是返回包含匹配项的完整行。
鉴于艺术家名称不包含 SPACE + -
+ SPACE ,您可以用单个字符替换该子字符串,这不会发生在文件名中(例如,|
),然后使用for /F
将字符串拆分为此字符,如下所示:
@echo off
setlocal EnableExtensions DisableDelayedExpansion
rem // Define constants here:
set "_LOCATION=C:\songs"
set "_MASK=* - *.*"
rem // Loop through the matching files:
for /F "usebackq eol=| delims=" %%F in ('
dir /B /A:-D "%_LOCATION%\%_MASK%"
') do (
rem // Store the pure file name:
set "FILE=%%~nF"
rem // Toggle delayed expansion to not lose exclamation marks:
setlocal EnableDelayedExpansion
rem // Replace ` - ` by `|` and split the file name at the first `|`:
for /F "tokens=1* delims=|" %%A in ("!FILE: - =|!") do (
endlocal
rem // Store the artist, which is the first file name portion:
set "ARTIST=%%A"
setlocal EnableDelayedExpansion
rem // Extract song title, which is all behind the first ` - `:
set "SONG=!FILE:* - =!"
rem // Return the result:
echo(Artist: !ARTIST!
echo(Title: !SONG!
)
endlocal
)
endlocal
exit /B