我有两个.txt文件。一个包含数字,另一个包含文件路径。我想将这两个文件合并到.csv。该组合基于数字(来自nrs.txt)在文件路径的字符串(nodups.txt)中。
现在我有以下代码:
@setlocal enableextensions enabledelayedexpansion
for /F %a IN (Output\nrs.txt) DO (
SET "nrs=%a"
for /F %b IN (Output\nodups.txt) DO (
SET "pathstring=%b"
SET csvdelim=,
IF NOT x!pathstring:%nrs%=""!==x%pathstring% %nrs%,%pathstring%>>new2017.txt
)
)
@endlocal
但是,我在代码中遇到以下问题:
nrs
变量设置为the pathstring is set to %b
)。我已经在这里看到了很多可能的解决方案,但似乎没有一个适用于我(设置!var!
和使用usebackq
等变量)。=""!==x%pathstring% was unexpected at this time
。 =""
应删除nr。从路径(如果它在那里)。当我用其他东西替换“”时,它仍然不起作用。文件内容为:
档案nrs.txt:
12345
12245
16532
nodubs.txt:
C:\tmp\PDF_16532_20170405.pdf
C:\tmp\PDF_1234AB_20170405.pdf
C:\tmp\PDF_12345_20170506.pdf
期望的输出:
12345, C:\tmp\PDF_12345_20170506.pdf
16532, C:\tmp\PDF_16532_20170405.pdf
我真的希望有人可以帮我解决这个问题!
答案 0 :(得分:1)
此解决方案使用基于arrays的不同方法:
@echo off
setlocal EnableDelayedExpansion
rem Load array from nodubs.txt file
pushd "Output"
for /F "tokens=1,2* delims=_" %%a in (nodubs.txt) do set "nodubs[%%b]=%%a_%%b_%%c"
rem Process nrs.txt file and show output
(for /F %%a in (nrs.txt) do (
if defined nodubs[%%a] echo %%a, !nodubs[%%a]!
)) > new2017.txt
答案 1 :(得分:0)
%%A
放入变量中,直接使用它。@setlocal enableextensions enabledelayedexpansion
for /F %%a IN (Output\nrs.txt) DO (
findstr /i "_%%a_" Output\nodups.txt >NUL 2>&1 || >>new2017.txt Echo %%a
)
@endlocal
||
上使用condiotonal执行来写入新文件。 答案 2 :(得分:0)
@Echo on
Pushd Output
for /F "tokens=1-3 delims=_" %%A IN (
' findstr /G:nrs.txt nodubs.txt'
) DO >>"..\new2017.txt" Echo %%B, %%A_%%B_%%C
Popd
示例输出:
> type ..\new2017.txt
16532, C:\tmp\PDF_16532_20170405.pdf
12345, C:\tmp\PDF_12345_20170506.pdf