2017-06-13 52 views
0

我已经完成了一个批处理文件以使用批次打印多个文件的第一行。但它只打印其中一个文件的第一行,但是与我拥有的文件数量相同。使用批次打印多个文件的第一行使用批次

我的意思是,它的FOR循环次数与我拥有的文件数一样多,但变量第一行总是具有相同的值。

我知道我错过了一些愚蠢的东西,我一直在尝试不同的组合几个小时,并看着没有结果的几个小时的stackoverflow条目。

这是我的代码:

为%%的F(* .trn)执行设置/ P FIRSTLINE = < %%˚F&回声%FIRSTLINE%

+3

阅读上延迟扩展,在此期间,您可以快速修复它。因此,'因为%%一个在(* .trn)执行设置/ P FIRSTLINE = <“% %A“&Call Echo %% firstline %%' – Compo

+2

@Compo - 如果您已经确认这实际上可行,请将其作为答案,而不仅仅是评论。 –

回答

0

关键部分在于缺少的是FOR循环内的call语句(是的,这确实是一些愚蠢的行为)。我可以证实,“速战速决”将打印每个文件的第一行,如要求:

for %%F in (*.trn) do set /p firstline=<%%F & call echo %%firstline%% 

的建议有关Delayed Variable Expansion是一个很好的一个。该版本将是这样的:

setlocal enabledelayedexpansion 
for %%F in (*.trn) do set /p firstline=<%%F & echo !firstline! 
endlocal 
0

谢谢@Compo和@Jonathan您的回答,你帮我完成这个项目。

事实上,这个问题是程序的一部分,我分享了最终的程序,可能对寻找类似解决方案的人有用。

我在做一个程序,如果一个目录中的文件的第一行中的数字大于46000,它会将该文件复制到另一个目录。这是最后的版本:

setlocal EnableDelayedExpansion For %%A In (*.trn) Do Set/P firstline=<%%A & if !firstline! GTR 46000 move "c:\temp\number\B1\%%A" "c:\temp\number\B2\%%A"