batch-file - .bat 文件上的 CJK 字符串
问题描述
我最近发现了这段代码来替换文件的某些部分,我想自动化这个过程。
所以代码是这样的:
@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。
我用 start.bat 文件调用 BatchSubstitute.bat 文件:
chcp 65001
set "nombreAPasar=いとうかなこ - ファティマ.m3u8"
BatchSubstitute.bat ".flac" .wav %nombreAPasar%
我想要做的,你可能已经猜到了,将播放列表文件 いとうかなこ - ファティマ.m3u8 上的“.flac”转换为“.wav”字符串,其文本为:
#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 关闭的情况下执行了它)
如果你想要完整的输出:
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 复制的)。
它会是任何解决方案或其他以工作方式执行相同操作的脚本吗?先感谢您。
-------------------------------------------------- ------------------------------
更新:我刚刚修改了我的两个 .bat ,似乎取得了进展:
开始.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: ---
解决方案
好的,终于做到了。在这行 BatchSubstitute .bat 我改变了
for /f "tokens=1,* delims=]" %%A in ('"type %~3|find /n /v """') do (
经过
for /f "tokens=1,* delims=]" %%A in ('"type "%~3"|find /n /v """') do (
并删除了,chcp 65001
因为它已写入输出文件,仅在调用 .bat 而不是被调用的文件中执行。
并且还将 start.bat 更改为:
chcp 65001 set "nameFile="いとうかなこ - ファティマ.m3u8""
call BatchSubstitute.bat ".flac" ".wav" %nameFile% > temp.temp
del %nameFile%
rename temp.temp %nameFile%
如果你想让它工作,我把它留在这里。
https://drive.google.com/file/d/1jRVaI3UJEXLRKxzd_YNZEwGD3c-kL1z2/view?usp=sharing
另请注意,.bat 文件以 UTF-8 编码,没有 BOM。
推荐阅读
- matlab - Simulink 弹丸运动与空气阻力仿真
- javascript - 打字稿导入 - 每个文件约定一个类
- c# - 解析值时遇到意外字符: 。路径'',第 0 行,位置 0。'
- deep-learning - 如何在 PyTorch 中有效地计算批量成对距离
- python - 在将正则表达式行为从 python 转换为 AWK 时遇到问题
- c# - 使用三元数计算方法中的计算步骤
- python - 在散点图中添加选择时大小图例消失
- java - 任务“:app:preDebugAndriodTestBuild”执行失败
- asp.net - Odata 提要未在 PowerBI 或 Excel 中连接
- python - 散点图网格由 matplotlib 或 seaborn 中的列分面