随机文件作为命令提示符中的第二个参数

时间:2014-09-08 15:25:01

标签: batch-file random command-line parameters command-prompt

我有一个字符串

  

FOR %% A in(SRCdocs \ * .doc)DO doc2rtf -f addon \ format1.fmt -file   “%% A”-out“%% A.rtf”

此字符串处理子文件夹“SRCdocs”中的所有源* .doc文件,应用一个格式文件(format1.fmt来自子文件夹“addon”)。因此,我将所有doc文件转换为rtf,只应用一个格式过滤器(format1.fmt)

我需要编辑此行,以便为每个doc到rtf转换实现鼓掌随机过滤器。

怎么做?

谢谢!

2 个答案:

答案 0 :(得分:2)

@echo off
    setlocal enableextensions disabledelayedexpansion

    set "count=0"
    for /f "tokens=1,* delims=:" %%a in ('dir /b /a-d "addon\*.fmt"^|findstr /n "^"') do (
        set "format[%%a]=%%b"
        set "count=%%a"
    )

    for %%a in ("SRCdocs\*.doc") do (
        setlocal enabledelayedexpansion
        set /a "format=!random! %% %count% + 1"
        for %%b in ("!format!") do for %%c in ("!format[%%~b]!") do (
            endlocal
            echo doc2rtf -f "addon\%%~c" -file "%%~fa" -out "%%~fa.rtf"
        )
    )

.fmt文件列表加载到内存中的数组中。现在,对于每个输入.doc文件,从.fmt文件列表中选择一个随机元素。

doc2rtf命令仅响应控制台。如果输出正确,请删除echo命令。

答案 1 :(得分:0)

如果我理解正确,您希望-out之后的文件名是随机的。我假设因此fred.doc之类的东西输出到fred12345.rtf。

您正在寻找的是%RANDOM%变量,它提供0到32767之间的随机数。由于您处于循环中,您还必须使用延迟扩展(或者您#39;每次都会得到相同的号码 - 也许这样可以,但我不会假设。)

因此,您的批处理文件必须在循环之前包含此内容:

setlocal enabledelayedexpansion

然后在您的FOR声明中执行此操作:

FOR %%A in (SRCdocs\*.doc) DO doc2rtf -f addon\format1.fmt -file "%%A" -out "%%A!RANDOM!.rtf"

如果您对此特定投放中的所有文件都使用相同的随机数,请使用%RANDOM%代替!RANDOM!

顺便说一下,如果你使用括号并将它分成多行,它会更容易阅读你的代码:

FOR %%A in (SRCdocs\*.doc) DO (
    doc2rtf -f addon\format1.fmt -file "%%A" -out "%%A.rtf"
)

功能不同但我觉得它更容易阅读。