繁体   English   中英

命令提示符在目录中搜索文件时,名称随机取一个

[英]Command Prompt Search for files in a directory take the name of one random

在目录c:\\configs我具有带有各种扩展名的文件,包括扩展名.rac。 我需要Windows命令提示符下的脚本,该脚本在c:\\configs查找以扩展名.rac结尾的文件名,而忽略其他扩展名。 然后,在所有以.rac扩展名结尾的名称中,脚本必须选择一个随机的名称,并使用命令c:\\programs\\submit.exe namerandom.rac

例如,假设随机的.rac文件名为mosaic.rac ,那么脚本将执行命令c:\\programs\\submit.exe mosaic.rac 当然,每次运行脚本时, mosaic.ra c名称都会更改,因为它是从找到的所有.rac文件中随机选择的名称。

任何人都有一个想法,可以放置示例代码?

@echo off
setlocal EnableDelayedExpansion & set n=0
for /f "delims=" %%a in ('dir /b /A-D "*.rac"') do (
set "f=%%a" & set "f[!n!]=!f!" & set /a "n+=1")
set /a c=%random% %% n
echo !f[%c%]!

说明:

  • 第4行:在f创建一个伪数组,其中n递增1
  • 第5行:借助%random%n它在0和称为n的文件总数之间取一个随机数。

这样,这将根据它们的位置自动创建多个变量,然后%random% %% n选择一个。

您最好像这样手动选择一些:

echo !f[0]! !f[1]! !f[2]! !f[3]! !f[4]! !f[5]! ... 

为此,您可以使用以下...

首先,要获取所有.rac文件,请使用dir命令。 /B开关指定仅输出裸文件列表,而没有任何页眉或页脚。 如果要递归搜索给定目录,请添加/S开关:

dir /B "C:\configs\*.rac"

其次,您需要计算返回的.rac文件的数量。 您可以将for /F循环(解析dir / B的输出)与set /A一起使用:

set /A COUNT=0
for /F "delims=| eol=|" %%L in (
  'dir /B "C:\configs\*.rac"'
) do (
  set /A COUNT+=1
)

第三,您需要计算适用范围内的随机数。 内置变量RANDOM检索032767的随机数,因此我们需要一些数学运算。 结果将是0%COUNT% - 1

set /A RNDNUM=%RANDOM%%%COUNT

第四,您可以将另一个for /F循环的“ skip选项选择一个随机文件(我们跳过先前计算的行数RNDNUM )。
if随机数为0if语句确保不提供任何skip选项。
goto命令确保仅将选定的文件传递给submit.exe 如果省略它,则选择后的每个文件也将一个接一个地传递到submit.exe

if %RNDNUM% gtr 0 (
  set SKIP=skip=%RNDNUM%
) else (
  set SKIP=
)
for /F "%SKIP% delims=| eol=|" %%L in (
  'dir /B "C:\configs\*.rac"'
) do (
  start "" /WAIT "submit.exe" "%%~L"
  goto :CONTINUE
)
:CONTINUE

将这些部分放在一起以获得最终脚本。

输入每个命令并附加/? 在命令提示符下获取显示的相应帮助文本。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM