Недавно я нашел этот фрагмент кода для замены определенных частей файла, и я хочу автоматизировать процесс.
Итак, код такой:
@echo off
REM -- Prepare the Command Processor --
SETLOCAL ENABLEEXTENSIONS
SETLOCAL DISABLEDELAYEDEXPANSION
::BatchSubstitude - parses a File line by line and replaces a substring"
::syntax: BatchSubstitude.bat OldStr NewStr File
:: OldStr [in] - string to be replaced
:: NewStr [in] - string to replace with
:: File [in] - file to be parsed
::$changed 20100115
::$source https://www.dostips.com
chcp 65001
if "%~1"=="" findstr "^::" "%~f0"&GOTO:EOF
for /f "tokens=1,* delims=]" %%A in ('"type %3|find /n /v """') do (
set "line=%%B"
if defined line (
call set "line=echo.%%line:%~1=%~2%%"
for /f "delims=" %%X in ('"echo."%%line%%""') do %%~X
) ELSE echo.
)
Я добавил chcp 65001 для поддержки UTF8.
Я вызываю файл BatchSubstitute.bat с файлом start.bat:
chcp 65001
set "nombreAPasar=いとうかなこ - ファティマ.m3u8"
BatchSubstitute.bat ".flac" .wav %nombreAPasar%
Что я хочу сделать, и вы, наверное, догадались, это преобразовать строки «.flac» в «.wav» в файле списка воспроизведения - フ ァ テ ィ m .m3u8, текст которого:
#EXTM3U
#EXTINF:246,いとうかなこ - ファティマ
01 - ファティマ - ファティマ.flac
#EXTINF:277,いとうかなこ - はじまりの歌
02 - ファティマ - はじまりの歌.flac
#EXTINF:303,いとうかなこ - 宿業ノ剣
03 - ファティマ - 宿業ノ剣.flac
#EXTINF:246,いとうかなこ - ファティマ(off vocal)
04 - ファティマ - ファティマ(off vocal).flac
#EXTINF:271,いとうかなこ - はじまりの歌(off vocal)
05 - ファティマ - はじまりの歌(off vocal).flac
#EXTINF:302,いとうかなこ - 宿業ノ剣(off vocal)
06 - ファティマ - 宿業ノ剣(off vocal).flac
И это выдает мне эту ошибку:
D:(Path)>start.bat
D:(Path)>chcp 65001
Página de códigos activa: 65001
D:(Path)>set "nombreAPasar=いとうかなこ - ファティマ.m3u8"
D:(Path)>BatchSubstitute.bat ".flac" .wav いとうかなこ - ファティマ.m3u8
Página de códigos activa: 65001
El sistema no puede encontrar el archivo especificado.
Единственная значимая вещь здесь - последняя строка, означающая: The system coulnd't find the specified file
, и она выбрасывается частью in ('"type %3|find /n /v """') do
файла BatchSubstitute (я знаю это, потому что я выполнил ее без @echo off)
Если вы хотите полный вывод:
D:(path)>start.bat
D:(path)>chcp 65001
Página de códigos activa: 65001
D:(path)>set "nombreAPasar=いとうかなこ - ファティマ.m3u8"
D:(path)>BatchSubstitute.bat ".flac" .wav いとうかなこ - ファティマ.m3u8
D:(path)>REM -- Prepare the Command Processor --
D:(path)>SETLOCAL ENABLEEXTENSIONS
D:(path)>SETLOCAL DISABLEDELAYEDEXPANSION
D:(path)>chcp 65001
Página de códigos activa: 65001
D:(path)>if ".flac" == "" findstr "^::" "D:\Users\Alonso\Desktop\RIPSteinsGate\FLAC\WAV\BatchSubstitute.bat" & GOTO:EOF
D:(path)>for /F "tokens=1,* delims=]" %A in ('"type いとうかなこ|find /n /v """') do (
set "line=%B"
if defined line (
call set "line=echo.%line:.flac=.wav%"
for /F "delims=" %X in ('"echo."%line%""') do %~X
) ELSE echo.
)
El sistema no puede encontrar el archivo especificado.
Итак, я попробовал несколько способов передать полную строку в сценарий, но никто не работал для меня. Я думаю, что есть ошибка.
CMD в реальности показывает? с квадратом вокруг них, но дело в том, что он это понимает, поэтому проблем нет (также вставленный текст напрямую копируется из CMD).
Это будет какое-нибудь решение или другой скрипт, который делает то же самое в рабочем режиме?
Заранее спасибо.
----------------------------------------------- ---------------------------------
UPDATE:
Я только что изменил оба своих .bat, и это похоже на прогресс:
start.bat
chcp 65001
set "nombreAPasar="いとうかなこ - ファティマ.m3u8""
BatchSubstitute.bat ".flac" .wav %nombreAPasar%
BatchSubstitute.bat
(just put that :: to give you info)::@echo off
REM -- Prepare the Command Processor --
SETLOCAL ENABLEEXTENSIONS
SETLOCAL DISABLEDELAYEDEXPANSION
::BatchSubstitude - parses a File line by line and replaces a substring"
::syntax: BatchSubstitude.bat OldStr NewStr File
:: OldStr [in] - string to be replaced
:: NewStr [in] - string to replace with
:: File [in] - file to be parsed
::$changed 20100115
::$source https://www.dostips.com
chcp 65001
if "%~1"=="" findstr "^::" "%~f0"&GOTO:EOF
for /f "tokens=1,* delims=]" %%A in ('"type %~3|find /n /v """') do (
set "line=%%B"
if defined line (
call set "line=echo.%%line:%~1=%~2%%"
for /f "delims=" %%X in ('"echo."%%line%%""') do %%~X
) ELSE echo.
)
Возвращены новые ошибки:
D:(path)>if ".flac" == "" findstr "^::" "(path)" & GOTO:EOF
D:(path)>for /F "tokens=1,* delims=]" %A in ('"type いとうかなこ - ファティマ.m3u8|find /n /v """') do (
set "line=%B"
if defined line (
call set "line=echo.%line:.flac=.wav%"
for /F "delims=" %X in ('"echo."%line%""') do %~X
) ELSE echo.
)
El sistema no puede encontrar el archivo especificado.
Error mientras se procesaba: いとうかなこ.
El sistema no puede encontrar el archivo especificado.
Error mientras se procesaba: -.
El sistema no puede encontrar el archivo especificado.
Error mientras se procesaba: ファティマ.m3u8.
ПРИМЕЧАНИЕ ТО:
El sistema no puede encontrar el archivo especificado. == System couldn't find specified file
и
Error mientras se procesaba: いとうかなこ. == Error while processing: ---