2017-01-30 122 views
0

我的代码中的所有内容除了最后一部分都能正常工作。批处理文件 - 将csv输出到不同的文件夹

我想将每个文本文件输出到具有相同名称的文件夹。它将三个文本文件输出到一个文件夹PentahoOutputs中。但是我想它输出如下所示:

文件夹system2.object2.assets包含文件system2.object2.assets 夹system3.object3.assets包含文件system3.object3.assets 文件夹system4.object4.assets包含文件system4.object4.assets

@echo off SetLocal EnableDelayedExpansion 
SET DELIMS=, 
SET COMMAND=AddChange 
SET EN=EN 
SET ASSETS=Assets 
SET DIREC = C:\Users\user.username\Documents\Training\BatchFiles\PentahoOutputs\ 
SET DELIMS2=. 

FOR /D %%a IN (C:\Users\user.username\Documents\Training\BatchFiles\PentahoOutputs\*) DO (SET subdirs=%%a 

result=!subdirs:~71,7! 

result2=!subdirs:~79,7! 

set "concats=!result!!delims!!result2!!DELIMS!!COMMAND!!DELIMS!!EN!" 
echo !concats! 

echo !CONCATS! >>C:\Users\user.username\Documents\Training\BatchFiles\PentahoOutputs\!result!!delims2!!result2!!delims2!!assets!.CSV 

) 

PAUSE>NUL 

编辑**********以下

改变问题的代码下面放这三个文件的每个三个文件夹.. 。但是我想在每个文件夹中的一个文件

for /d %%b in (C:\Users\usre.username\Documents\Training\BatchFiles\PentahoOutputs\*) DO (echo !CONCATS! >>%%b\!result!!delims2!!result2!!delims2!!assets!.csv) 
+2

在'SET DIREC ='中,除去'='符号周围的_spaces_,因为它们成为变量名和值的一部分否则... – aschipfl

回答

1

从您发布的代码 - 鉴于aschipfl的变化注意到(尽管你不尝试使用direc

您发布的代码已经在尝试了错位,我认为,伪装用户名。它也似乎是你削减了实际的代码,只显示相关的部分。这是很好的和可以理解的(但您的修改已在代码中一个明显的错字 - 这就是为什么你应该剪切和粘贴尽可能)

所以 - 在setlocal以下的@echo off必须由&分开命令连接器或在单独的行上(我的首选项)。

在您的for ... %%a ...区块内,您已删除所需的set关键字result*

你用于substringing不适合你的路径所做的更改的固定值,所以结果result是(例如)“tem3.ob”

如果值不(如delims),那么最好使用%delims% - result更改,所以你会使用!result!而不是%result%!delims!当然也有效 - 但使用延迟扩展形式使读者相信它会有所不同。 (意见)

'最好用字符串分配来使用set "var=value",因为引号可确保分配的值中不包含杂散尾部空格。你永远只能需要有这种情况发生,一旦...

OK - 这里有一个修订

@echo OFF 
SetLocal 
SET DELIMS=, 
SET COMMAND=AddChange 
SET EN=EN 
SET ASSETS=Assets 
SET DIREC=U:\Users\user.username\Documents\Training\BatchFiles\PentahoOutputs\ 
SET DELIMS2=. 

FOR /D %%a IN (%direc%*) DO (
FOR /f "tokens=1,2,3 delims=." %%p IN ("%%~nxa") DO IF /i "%%r"=="%assets%" (
    echo %%p%delims%%%q%DELIMS%%COMMAND%%DELIMS%%EN% 
    echo %%p%delims%%%q%DELIMS%%COMMAND%%DELIMS%%EN% >> %%a\%%~na.CSV 
) 
) 

GOTO :EOF 

请注意,我用U:为测试目录(这是我的机器上的RAMDRIVE)

给定外部循环,%%a被分配到目录的完整路径名。

既然您暗示您的目标名称是system2.object2.assets,那么%%~nxa(%% a的名称和扩展名)方便地包含此字符串。解析,使用的. delims以及选择所述第一令牌3将分配给system2%%pobject2%%qassets%%r到这避免了substringing问题,并允许systemobject是任何长度 - 不仅仅是7.

if语句确保for...%%p的主块仅适用于找到适合的目录。 .asset(/i使if不区分大小写)

所需线然后可以从元变量和常量构造,如可以在目标文件名,所以不需要enabledelayedexpansion

+0

这是可行的,谢谢你的解释 – Karen

相关问题