2015-07-12 63 views
0

我想解决简单的问题 - 循环重复时保存到不同的文件。我知道即时获得结果,因为当我正在做>> file.txt 我正在将所有重做成一个文件。这将是巨大的,结果每次都保存到不同的文件(并命名由可变文本文件。但也有一些是错误的。它节省了最后的循环迭代的结果。每次重复循环到不同文件的结果WIN BATCH

@echo off 
setlocal ENABLEDELAYEDEXPANSION 
    set vidx=0 
    for /F "tokens=1* delims=;" %%A in (list2.csv) do (
     SET /A vidx=!vidx! + 1 
     set var!vidx!=%%A 
     rxrepl -f temp.txt -s "xNAMEx" -r "%%A">file___%var!vidx!%.txt 
    ) 
+0

延迟扩展启用? – Rafael

+0

如何检查? –

+0

要启用它只需将'setlocal enabledelayedexpansion'放在档案 – Rafael

回答

1

尝试通过更换这 file___%var!vidx!%.txt 。这file___!var!!vidx!!!.txt

+0

很酷,thx它几乎可以工作 - 它使文件感谢!但是文件看起来像file___1,文件___ 2 - 类似变量存储在vidx中,但它应该看起来像file___Name1 file___Name2(名称应该取自%% A,存储在var1,var2,var3等中。) –

+1

我制作了变量集名= %% A并重新制作了你的!var !! vidx! !!。txt with!name!:)非常感谢!祝你有美好的一天! –

1

你不需要任何变量来得到你正在寻找的结果还有,*是usesless在"tokens=1*"如果你从来没有引用变量%%B"tokens=1"是默认因此,所有你需要的是:

for /F "delims=;" %%A in (list2.csv) do rxrepl -f temp.txt -s "xNAMEx" -r "%%A">"file___%%A.txt" 

如果您确实想要构建var.N值的“数组”,则可以使用FINDSTR在每行前加一个递增数字(行号)。

for /F "tokens=1,2 delims=:;" %%A in ('findstr /n "^" list2.csv') do (
    set "var.%%A=%%B" 
    set "var.cnt=%%A" 
    rxrepl -f temp.txt -s "xNAMEx" -r "%%B">"file___%%B.txt" 
) 

:: Display the "array" values 
for /l %%N in (1 1 %var.cnt%) do echo var.%%N=!var.%%N! 
0

使用的只是...>"file___%%~A.txt"而不是错误>file___%var!vidx!%.txt

@ECHO OFF 
SETLOCAL enableextensions enabledelayedexpansion 
set vidx=0 
for /F "tokens=1* delims=;" %%A in (list2.csv) do (
    SET /A "vidx+=1" 
    set "var!vidx!=%%~A" 
    echo loopvar %%%% A=%%~A "file___%%~A.txt" 
    rem next line shows how to treat array-like names 
    call set "filenamepart=%%var!vidx!%%" 
    echo filenamepart=!filenamepart! "file___!filenamepart!.txt" 
    rem rxrepl -f temp.txt -s "xNAMEx" -r "%%A">"file___%%~A.txt" 
)