2014-01-16 70 views
1

我有什么做的是后续:FOR cmd命令来修改文件

_I有多个文本输入文件例如:

Auditors.txt made like that   Backup users.txt made like taht 

    "Auditors"       "Backup Users", 
    "Auditor","3"      "Backup","1" 
    "pippo","20" 

_The输出应该是:

   lista.txt 

       Auditors,Auditor,3,pippo,20 
       Backup Users,Backup,1 

我试着用下面的代码来实现结果: (我记得2次“FOR”cicle,一次GRUPPI = auditors.txt,一次GRUPPI = Backup USERS.txt)

... 
    for /F "tokens=* delims=," %%a in ("%GRUPPI%.txt") do(
    echo|set /p=%%a >> lista.txt 
    echo|set /p=, >> lista.txt) 
    pause 
    ... 

它没有打开输入文件来读取线路! (考虑也“备份用户”有问题创造一个空间)

结果: 如果FOR参数设置为(%GRUPPI%.TXT) - >它甚至不产生输出文件LISTA。 txt

如果FOR参数设置为(“%GRUPPI%.txt”) - >它会生成文件lista.txt,但在其中我只找到输入文件名!

如果我用 “有usebackq” 和( “%GRUPPI%.TXT”) - >它甚至不产生输出文件lista.txt

有人可以给我一个提示吗?

克里斯蒂安

回答

1

阅读FOR仔细documenation(help forfor /?)。您将看到USEBACKQ选项改变了IN()子句的解释方式。下面应该让你对你的方式:

for /F "usebackq tokens=* delims=," %%a in ("%GRUPPI%.txt") do(... 
0
@ECHO OFF 
SETLOCAL 
DEL newfile.txt 2>nul 
FOR /f "delims=" %%a IN (q21166181.txt) DO (
SET "gruppi=%%a" 
CALL :process 
) 

GOTO :EOF 
:process 
SET "line=" 
FOR /f "usebackqdelims=" %%c IN ("%gruppi%") DO (
CALL :build %%c 
) 
>>newfile.txt ECHO(%line:~1% 
GOTO :eof 

:build 
SET "$1=%~1" 
IF NOT DEFINED $1 GOTO :EOF 
SET "line=%line%,%$1%" 
shift 
GOTO build 

如果我有你想要的东西的权利,这可能适合。

q21166181.txt包含

auditors.txt 
backup users.txt 

auditors.txt包含

"Auditors"  
    "Auditor","3" 
    "pippo","20" 

backup users.txt包含

"Backup Users", 
    "Backup","1" 

结果在newfile.txt包含

Auditors,Auditor,3,pippo,20 
Backup Users,Backup,1