我已经完成了一个批处理文件以使用批次打印多个文件的第一行。但它只打印其中一个文件的第一行,但是与我拥有的文件数量相同。使用批次打印多个文件的第一行使用批次
我的意思是,它的FOR循环次数与我拥有的文件数一样多,但变量第一行总是具有相同的值。
我知道我错过了一些愚蠢的东西,我一直在尝试不同的组合几个小时,并看着没有结果的几个小时的stackoverflow条目。
这是我的代码:
为%%的F(* .trn)执行设置/ P FIRSTLINE = < %%˚F&回声%FIRSTLINE%
我已经完成了一个批处理文件以使用批次打印多个文件的第一行。但它只打印其中一个文件的第一行,但是与我拥有的文件数量相同。使用批次打印多个文件的第一行使用批次
我的意思是,它的FOR循环次数与我拥有的文件数一样多,但变量第一行总是具有相同的值。
我知道我错过了一些愚蠢的东西,我一直在尝试不同的组合几个小时,并看着没有结果的几个小时的stackoverflow条目。
这是我的代码:
为%%的F(* .trn)执行设置/ P FIRSTLINE = < %%˚F&回声%FIRSTLINE%
关键部分在于缺少的是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
谢谢@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"
阅读上延迟扩展,在此期间,您可以快速修复它。因此,'因为%%一个在(* .trn)执行设置/ P FIRSTLINE = <“% %A“&Call Echo %% firstline %%' – Compo
@Compo - 如果您已经确认这实际上可行,请将其作为答案,而不仅仅是评论。 –