【问题标题】:batch Loop through file in folder批处理循环遍历文件夹中的文件
【发布时间】:2018-12-18 16:31:53
【问题描述】:

所有,我是一个对脚本有一点了解的新手。 我做了这个完美的.bat:

for /l %%x in (1, 1, 4) do (
echo %%x
type A%%x.xml + tail.xml >> v%%x.stage
)

它执行 4 次循环,合并文件夹内的 xml 文件。 .bat 与要合并的 xml 位于同一文件夹中。

但如果我想执行 10 的循环,我需要手动编辑数字 4。 有没有办法使用文件夹中的文件量进行循环? 假设文件夹中有 15 个 .xml 文件,因此循环将运行 15 次。 我尝试了在堆栈溢出时发现的不同循环代码,但我无法使它们工作:( 你能帮帮我吗?

非常感谢

更新: 谢谢@Squashman,所以我的代码现在应该是这样的吧?

for %%x IN (*.xml) do set /a count+=1
echo %%x
type A%%x.xml + tail.xml >> v%%x.stage

【问题讨论】:

  • for %%G IN (*.xml) do set /a count+=1
  • @Squashman 我已经用一些代码更新了帖子,请您进一步帮助我吗?
  • FOR 命令上方使用我给你的FOR 命令。然后使用环境变量%count%,其中4 在您的代码中。
  • 效果很好,谢谢@Squashman :D
  • 如果目录中有15 .xml 文件,则应该只有14 循环,因为tail.xml 将是其中之一,我有理由相信您不想将其与自身合并.

标签: batch-file for-loop batch-processing


【解决方案1】:

如果保证数字范围是连续的, Squashman 的建议很有效。

要获得独立于任何可能间隙的最大数字,您可以使用:

:: Q:\Test\2018\12\18\SO_53837368.cmd
@Echo off&SetLocal EnableDelayedExpansion
set "Max=0"
For /f "delims=a." %%A in ('Dir /B "a*.xml"') do (
    Set /A "Num=%%A"
    if !Num! gtr !Max! set "Max=!Num!"
)
Echo Max number is: %Max%

它将文件名在前导 a 和扩展名中的点之间拆分,保留唯一编号。
Set /A 用于排除可能与非数字值不匹配的情况。

【讨论】:

  • 感谢@LotPings 现在我的文件范围是连续的,但如果文件不同,我会记住你的代码:D
  • 我认为理论上您可以使用您的代码并将!num! 用作复制命令的一部分。 copy A!num!.xml + tail.xml >> v!num!.stage。问题是我们不知道整个过程的所有细节,因此很难提供具体的防弹答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多