我有一个字符串
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转换实现鼓掌随机过滤器。
怎么做?
谢谢!
答案 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"
)
功能不同但我觉得它更容易阅读。