我的代码中的所有内容都工作正常,除了最后一部分。
我想将每个文本文件输出到具有相同名称的文件夹。它将三个文本文件输出到一个文件夹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 )
答案 0 :(得分:1)
来自您发布的代码 - 如上所述aschipfl的更改(尽管您不会尝试使用direc
)
我认为,您发布的代码已被破坏,以掩盖用户名。您似乎还删除了实际代码以仅显示相关部分。这是好的和可以理解的(但是你的编辑在代码中有一个明显的错误 - 这就是为什么你应该尽可能地剪切和粘贴。)
所以 - setlocal
之后的@echo off
必须用&
命令连接符分隔,或者(我的偏好)在另一行上。
在for ... %%a ...
块中,您已移除了set
所需的result*
关键字。
您用于子字符串的固定值不适合您对路径名所做的更改,因此result
中的结果是(例如)" tem3 .ob"
如果某个值在一个区块内没有变化(例如delims
),那么最好使用%delims%
- result
更改,因此您可以使用!result!
不是%result%
。 !delims!
当然也有效 - 但是使用延迟扩展形式可以使读者相信它会发生变化。 (意见)
最好使用字符串赋值来使用set "var=value"
作为引号,以确保分配的值中不包含杂散尾随空格。你只需要让它发生一次......
好的 - 这是一个修订
@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
分配给%%p
,object2
分配给%%q
和assets
分配给{{ 1}}这可以避免子串问题,并允许%%r
和system
为任意长度 - 而不仅仅是7。
object
语句确保if
的主要块仅对找到符合的目录执行。 .asset(for...%%p
使{{1}不区分大小写)
然后可以从元变量和常量构造所需的行,目标文件名也是如此,因此不需要/i
。