Ces*_*sar 2 windows-7 open batch-file
我想获得一个 bat 文件,它将从特定文件夹中打开一个随机文件(带有任何扩展名),但也可以打开该文件夹内所有子文件夹中的文件。还有另一个问题提出了这样的问题(如何在文件夹中打开随机文件,并设置只应打开具有指定文件扩展名的文件?),并提供以下脚本:
@echo off & setlocal
:: start of main
rem Set your path here:
set "workDir=C:\DVDCOVERS"
rem Read the %random%, two times is'nt a mistake! Why? Ask Bill.
rem In fact at the first time %random% is nearly the same.
@set /a "rdm=%random%"
set /a "rdm=%random%"
rem Push to your path.
pushd "%workDir%"
rem Count all files in your path. (dir with /b shows only the filenames)
set /a "counter=0"
for /f "delims=" %%i in ('dir /b ^|find "."') do call :sub1
rem This function gives a value from 1 to upper bound of files
set /a "rdNum=(%rdm%*%counter%/32767)+1"
rem Start a random file
set /a "counter=0"
for /f "delims=" %%i in ('dir /b ^|find "."') do set "fileName=%%i" &call :sub2
rem Pop back from your path.
popd "%workDir%"
goto :eof
:: end of main
:: start of sub1
:sub1
rem For each found file set counter + 1.
set /a "counter+=1"
goto :eof
:: end of sub1
:: start of sub2
:sub2
rem 1st: count again,
rem 2nd: if counted number equals random number then start the file.
set /a "counter+=1"
if %counter%==%rdNum% (start "" "%fileName%")
goto :eof
:: end of sub2
:: -snap--- end of batch
Run Code Online (Sandbox Code Playgroud)
来源:http : //forums.majorgeeks.com/showthread.php?t=181574
但是,此脚本仅打开位于主文件夹中的文件,而不会打开子文件夹中的文件。我确定修复是一个简单的修复,但我无法弄清楚。非常感谢帮助,谢谢。
这段代码不仅可以随机打开文件夹层次结构中任意位置的文件,而且比原始代码更高效:
@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"
exit /b
Run Code Online (Sandbox Code Playgroud)
默认情况下,脚本将查找当前目录下的文件,但您可以将根路径作为第一个参数传递,它会开始查找那里。
代码在只打开一个文件时效率更高,但如果你想打开多个文件,它确实显示了改进,因为它只需要生成一次列表。让 FINDSTR 找到所选文件而不是遍历整个列表也更有效。
我构造了代码以方便打开多个随机文件。下面我随机选择25个,打印出打开命令。只需删除 ECHO 即可实际打开文件:
@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
:: Open 25 random files
for /l %%N in (1 1 25) do 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 echo start "" "%%B"
exit /b
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15322 次 |
| 最近记录: |