我想制作一个.bat
文件,它会在随机文件夹/子文件夹中打开第一个文件,与.bat
文件位于同一位置。
我目前的代码只会打开一个随机文件。
@echo off
setlocal enableextensions disabledelayedexpansion
set "rootFolder=G:\Movies\Anime"
for /f "usebackq tokens=1,* delims=:" %%a in (`
cmd /q /v /e /c "for /f delims^= %%a in ('dir /a-d /s /b "%rootFolder%"') do echo(!random!:%%a"
^| sort 2^>nul
^| cmd /q /e /v /c "set /p ".^=" & echo(!.!"
`) do start "" "%%~b"
我还有一个.bat
文件,可生成一个文本文件,其中包含同一位置中所有文件夹的列表。我不确定引用它是否更容易。
dir /b > Animelist.txt
如果可能,如何排除它打开特定类型的文件,如jpegs /其他.bat
文件?
答案 0 :(得分:0)
文件夹的随机选择是明确的
@echo off
setlocal enableextensions Enabledelayedexpansion
Set Cnt=0
Set "Exclude=.bat$ .cmd$ .jpg$ .jpeg$ .txt$"
Pushd "G:\Movies\Anime"
(Echo::: Numbered List of folders
For /f "delims=" %%F in (
'Dir /B/S/AD/ON'
) Do Set /A Cnt+=1&Echo:!Cnt!:%%F
)>DirList.txt
:: Get Random num 1..Cnt
Set /A RndDir=%Random% %% Cnt+1
:: Get random folder name
For /f "tokens=1,* Delims=:" %%F in (
'Findstr "^%RndDir%:" DirList.txt '
) Do Set "DirName=%%G"
Echo selected %RndDir% of %Cnt% = folder %DirName%
Pushd "%DirName%
Set "FileName"
For /f "Delims=" %%F in (
'Dir /B/A-D ^|findstr /i /V "%Exclude%"'
) Do If Not defined FileName Set "FileName=%%~F"
If defined FileName Start "" "%FileName%"
Popd
Popd
Goto :Eof
有点困难。如果使用带有几个扩展名的目录,如@aschipfl建议,则可以预先确定首先查找和找到哪些扩展名
排除文件类型的另一种方法在不知道可能出现的类型的情况下更加繁琐。
此处我的批次已修改简化了部分内容:
class Sync s eff a | s -> eff where -- FunDep here: eff is determinded via s
sync :: s -> Eff eff a
data ConsoleSync = ConsoleSync
instance syncWithConsole :: Sync ConsoleSync (console :: CONSOLE | eff) Unit where
sync _ = log "hello"
foo :: ∀ eff. Eff (console :: CONSOLE | eff) Unit
foo = sync ConsoleSync
答案 1 :(得分:0)
你可以试试这个
@echo off
setlocal enableextensions disabledelayedexpansion
set "rootFolder=%cd%"
set fileTypes= "*.avi" "*.mpeg" "*.mkv"
pushd "%rootFolder%" && (
for /f "usebackq tokens=1,* delims=:" %%a in (`
cmd /q /v /e /c "set p=&for /r %%a in (%fileTypes%) do if not !f!==%%~dpa (set f=%%~dpa&set /a ((%random% %% 16273^)+1^)*!random!&echo :%%~dpa)"
^| sort 2^>nul
^| cmd /q /e /v /c "set /p ".^=" && echo(!.!"
`) do pushd "%%~b." && (
for /f "delims=" %%c in ('
dir /b /a-d /on %fileTypes% 2^>nul
^| cmd /q /e /v /c "set /p ".^=" && echo(!.!"
') do start "" "%%~fc"
popd
)
popd
)
分解任务
set
)pushd
)
cmd
内的for /f
if
cmd
内的set /a
)echo
)并输出文件夹(sort
)cmd
)for /f %%a
内的第二个delims
)tokens
中for /f %%a
和pushd
的原因)dir
)
cmd
)for /f %%c
)start
)popd
)popd
)static boolean solve(int[][] mArr, int i, int j) {
)