我想在目录及其子目录中打开一个随机文件。我知道stackoverflow上有足够的问题给出了代码,但我发现其中没有一个支持utf-8字符。
我使用在stackoverflow中找到的以下代码。
@echo off
setlocal
:: Create numbered list of files in a temporary file
set "tempFile=%temp%\%~nx0_fileList_%time::=.%.txt"
dir /b /s /a-d %1 | findstr /n "^" >"%tempFile%"
:: Count the files
for /f %%N in ('type "%tempFile%" ^| find /c /v ""') do set cnt=%%N
call :openRandomFile
:: Delete the temp file
del "%tempFile%"
exit /b
:openRandomFile
set /a "randomNum=(%random% %% cnt) + 1"
for /f "tokens=1* delims=:" %%A in (
'findstr "^%randomNum%:" "%tempFile%"'
) do start "" "%%B"
cmd /k
它的工作方式很好,直到它选择像#b; blablabla_空色デイズ.mp3"这样的文件,在这种情况下它会出现类似"文件blablabla _ ?????。mp3的错误。无法找到。"我有几十个这样的文件。
我尝试在文件的开头使用chcp 65001
来使用utf-8,如果我这样做,teporary created .txt列表会显示日文文件的正确名称,但是拾取本身不会之后再工作了,所以我带走了@echo off
并且cmd在set /a "randomNum=(%random% %% cnt) + 1"
上打印错误:错误:除以零。
在这一点上,我不知道发生了什么,因为没有chcp 65001
文件工作得很好。
我不知道批次,拜托,有没有人知道如何让它运行?
我真的很开心!
答案 0 :(得分:0)
我试试
) do start "" "%%~sB"
在:openRandomFile
过程中,该过程应使用其短名称打开文件。
抱歉 - 无法测试,因为我没有任何UTF-8文件名(我知道)