尝试运行文件名中使用 unicode 字符的 .bat 文件 - 但无法解析

问题描述 投票:0回答:1

我试图运行一个非常简单的bat文件,它本质上改变了目录/环境,然后使用streamlit来运行程序,但我一生都无法让它识别正在使用的unicode字符。这是.bat 文件

@echo off
chcp 65001
call "C:\...\Miniconda3\Scripts\activate.bat"
call conda activate env
cd C:\...\Documents\GitHub\...
streamlit run 🌎_Project.py
pause

直到最近我才遇到问题,但无论如何,当我运行这个bat文件(或在anaconda提示符下逐行运行)时,我都会收到一个错误,unicode在地球unicode字符上读取不正确。

Error: Invalid value: File does not exist: ??_Project.py

我无法更改文件的名称,因为它位于较大的存储库中。我尝试过以多种不同的格式保存bat文件(我认为UTF-8应该是正确的),并且我尝试调整字体以查看是否有奇怪的东西,但没有任何运气。除了手动重命名文件及其出现在本地的任何地方之外,还有其他解决方法吗?

batch-file unicode utf-8 anaconda
1个回答
0
投票

您面临的问题似乎与 CMD 对 Unicode 字符的有限支持有关。即使使用

chcp 65001
更改代码页以启用 UTF-8 编码后,CMD 也可能无法完全支持 Unicode 字符,例如文件名中的地球仪表情符号“🌎”。话虽如此,找到最佳解决方案确实取决于您的需求。

在我的情况下,该命令似乎按预期运行。这可能是由于我使用的是 Windows 10,这是一个更新的操作系统,尽管我不能肯定地说。有时,需要使用引号,但否则运行时不会出现问题,这可能表明您正在使用不正确的原始编码保存文件。尽管如此,下面我提出了一些解决方案。

使用短文件名(8.3 文件名)

如果您想以纯批处理方式保存代码,此解决方案是最好的。

  1. 导航到 Python 脚本所在的目录 命令提示符。
  2. 运行
    dir /x
    查看短 8.3 文件名和常规文件名 文件名。
  3. 识别 🌎_Project.py 的短文件名。
  4. 在 .bat 脚本中使用短文件名,而不是 🌎_Project.py。

例如,如果短文件名是 GLOBE~1.PY,则修改您的 .bat 脚本,如下所示:


@echo off
chcp 65001
call "C:\...\Miniconda3\Scripts\activate.bat"
call conda activate env
cd C:\...\Documents\GitHub\...
streamlit run GLOBE~1.PY
pause

Windows有这个功能,它对你的目的非常有用。

使用PowerShell

您可以使用 PowerShell 脚本替换整个批处理文件,它对 Unicode 和其他功能有更好的支持,您可能希望稍后添加。

创建一个包含以下内容的

.ps1
文件:


$env:Path += ";C:\...\Miniconda3\Scripts\"
conda activate env
Set-Location "C:\...\Documents\GitHub\..."
streamlit run "🌎_Project.py"
pause

要运行 PowerShell 脚本,请右键单击它并选择“使用 PowerShell 运行”。

这样,您可以拥有更灵活的环境和运行的保障。

手动重命名(如果没有其他选项)

如果上述解决方案不合适,并且您无法更改原始文件名,您可以将文件复制到一个具有 ASCII 名称的临时文件,运行它,然后将其删除。这不是最优雅的解决方案,但如果您无法运行但可以访问它,那么它会起作用。


@echo off
chcp 65001
call "C:\...\Miniconda3\Scripts\activate.bat"
call conda activate env
cd C:\...\Documents\GitHub\...
copy "🌎_Project.py" "temp_Project.py"
streamlit run temp_Project.py
del "temp_Project.py"
pause

希望有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.