批量选择随机文件,其名称中包含utf-8个字符

时间:2016-12-04 11:17:26

标签: batch-file utf-8

我想在目录及其子目录中打开一个随机文件。我知道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文件工作得很好。 我不知道批次,拜托,有没有人知道如何让它运行? 我真的很开心!

1 个答案:

答案 0 :(得分:0)

我试试

) do start "" "%%~sB"

:openRandomFile过程中,该过程应使用其短名称打开文件。

抱歉 - 无法测试,因为我没有任何UTF-8文件名(我知道)