【问题标题】:Need to modify a batch file to be able to process non-ASCII filenames需要修改批处理文件才能处理非 ASCII 文件名
【发布时间】:2021-08-08 10:06:53
【问题描述】:

我要从一开始就说我没有任何编程经验。 音频论坛中的某个人为我编写了这个批处理文件,以便使用名为 FinalCD 的命令行程序对 WAV 文件进行下采样。工作完美,但我注意到它无法处理文件名为 unicode、西里尔文、亚洲符号等的文件。 有人告诉我我可以解决这个问题,但是将文件名放在双引号中,因为我无法弄清楚代码中的确切位置。

echo off
cls
for %%a in ("input\*.wav") do finalcd /f0 /d1 "%%a" "output\%%~nxa"
pauseecho off

写它的人也说过不包括安全检查,我只是想知道安全检查是否意味着在处理过程中查找错误或在处理文件之前检查潜在的隐藏恶意软件。

【问题讨论】:

  • 什么是finalcd?它是文件扩展名为.exe.com 的可执行文件,还是文件扩展名为.bat.cmd.vbs 的脚本文件,...? finalcd 是否完全支持 Unicode 文件名?如果第三行 for %%I in ("input\*.wav") do finalcd.exe /f0 /d1 "%%I" "output\%%~nxI" 2>nul || finalcd.exe /f0 /d1 "%%~sfI" "output\%%~snxI" 以不等于 0 的退出值退出并使用短 8.3 文件名作为输入和输出文件,请尝试第二次运行 finalcd。第一行应该是@echo off
  • 处理批处理文件的 Windows 命令处理器 cmd.exe 不是为处理 Unicode 文件名而设计的。对于cmd.exe 的这种限制,使用chcp 65001 完成的UTF-8 字符编码当然不是真正有效的解决方法。如果finalcd 本身完全支持 Unicode 文件名,最好使用专为处理 Unicode 文件名而设计的 PowerShell 在 .wav 文件列表上运行 finalcd
  • finalcd 是一个可执行文件,.exe。但我使用批处理文件来运行它,并批量压缩多个文件。还有一个前端,但它非常微薄,只允许处理单个文件。如果它真的有能力本身是一个很好的问题。开发人员说这是旧的可视化 C++,并且自己输入支持需要做很多工作。我将如何在 powershell 中运行它?
  • 从阅读本文我猜如果软件不支持它,我将无法最终更改它?我是一个软件菜鸟,所以我认为可以通过更改批处理文件来实现
  • 好吧,如果finalcd.exe 本身不支持Unicode 文件名,可以使用PowerShell 在循环中处理所有.wav 文件,首先将要处理的当前文件重命名为temp.wav ,以temp.wav 作为输入文件名和output\temp.wav 作为输出文件名运行finalcd.exe,PowerShell 将输入文件重命名为原始文件名,并将输出文件名重命名为原始文件名。

标签: windows batch-file cmd character-encoding


【解决方案1】:

试试这个:

@echo off
chcp 65001
for %%a in ("input\*.wav") do finalcd /f0 /d1 "%%a" "output\%%~nxa"
pause

【讨论】:

  • 不,仍然没有,出现以下错误(多个文件)活动代码页:65001 FinalCD v0.29a - 高精度重采样器 (c)2004-21 Tom Browne / Sonic Illusions Handle 错误! FinalCD v0.29a - 高精度重采样器 (c)2004-21 Tom Browne / Sonic Illusions 无法打开输入文件 input\fXxs - Apotheoptic - 04 ?????????.wav!转换失败,错误代码 -1
  • 尝试使用chcp 437 来避免自动字符转换(尽管这可能无法解决 Unicode 字符的问题)...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-28
  • 1970-01-01
相关资源
最近更新 更多