【问题标题】:Command Prompt Search for files in a directory take the name of one random命令提示符 搜索目录中的文件 随机取一个名字
【发布时间】:2015-09-20 17:24:28
【问题描述】:

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

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

有人知道怎么做并且可以放示例代码吗?

【问题讨论】:

  • 使用 windows powershell 怎么样?您可以在 powershell 内的 1 行中执行此操作(运行 c:\powershell)并执行此操作:PS C:\configs> c:\programs\submit.exe (Get-ChildItem C:\configs*.rac | Get-Random) .名称
  • 但我需要在计算机启动时自动执行脚本。使用 power shell 如何在每次 Windows 启动时运行而无需每次都运行新的 c:\powershell?
  • 您可以使用 Windows 调度程序将脚本设置为在启动时运行。

标签: windows batch-file cmd


【解决方案1】:
@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 行:它取一个介于 0 和称为 n 的文件总数之间的随机数:%random%n

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

你不妨像这样手动挑选一些:

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

【讨论】:

  • 请在每一步添加一些详细的 cmets 以便更好地理解。
【解决方案2】:

要做到这一点,您可以使用以下...

首先,要获取所有.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

第四,您可以使用另一个带有skip 选项的for /F 循环来选择一个随机文件(我们跳过之前计算的RNDNUM 行数)。
if 语句确保在随机数为 0 的情况下不提供 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

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

键入每个命令并在命令提示符中附加/? 以显示相应的帮助文本。

【讨论】:

    猜你喜欢
    • 2017-11-16
    • 1970-01-01
    • 2012-10-31
    • 2014-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多