![](/img/trans.png)
[英]Windows command to search directory for a specific name, then move its files to parent
[英]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%]!
说明:
f
创建一个伪数组,其中n
递增1 %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
检索0
到32767
的随机数,因此我们需要一些数学运算。 结果将是0
到%COUNT% - 1
:
set /A RNDNUM=%RANDOM%%%COUNT
第四,您可以将另一个for /F
循环的“ skip
选项选择一个随机文件(我们跳过先前计算的行数RNDNUM
)。
if
随机数为0
, if
语句确保不提供任何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.