我试图运行一个非常简单的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应该是正确的),并且我尝试调整字体以查看是否有奇怪的东西,但没有任何运气。除了手动重命名文件及其出现在本地的任何地方之外,还有其他解决方法吗?
您面临的问题似乎与 CMD 对 Unicode 字符的有限支持有关。即使使用
chcp 65001
更改代码页以启用 UTF-8 编码后,CMD 也可能无法完全支持 Unicode 字符,例如文件名中的地球仪表情符号“🌎”。话虽如此,找到最佳解决方案确实取决于您的需求。
在我的情况下,该命令似乎按预期运行。这可能是由于我使用的是 Windows 10,这是一个更新的操作系统,尽管我不能肯定地说。有时,需要使用引号,但否则运行时不会出现问题,这可能表明您正在使用不正确的原始编码保存文件。尽管如此,下面我提出了一些解决方案。
如果您想以纯批处理方式保存代码,此解决方案是最好的。
dir /x
查看短 8.3 文件名和常规文件名
文件名。例如,如果短文件名是 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 脚本替换整个批处理文件,它对 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
希望有帮助。