gpt4 book ai didi

windows - 批处理文件中的循环读取文件路径文件

转载 作者:可可西里 更新时间:2023-11-01 10:08:16 26 4
gpt4 key购买 nike

我想编写一个 Windows 批处理文件脚本,它将循环遍历 FILE PATHS 的文本文件,使用每个文件路径中的数据做一些工作,然后最终删除该文件。

我首先运行 FORFILES 命令并发送其输出(@PATH 参数是它匹配的任何文件的完整路径)到文本文件 (results.txt)。

我最终得到了这样一个 results.txt 文件:

"C:/Windows/Dir1/fileA.log"
"C:/Windows/Dir1/fileA.log"
"C:/Windows/Dir2/fileC.log"
"C:/Windows/Dir3/fileB.log"

我想做的是:

  • 使用 FOR 循环并读取 results.txt 文件中的每一行
  • 对于每一行(文件路径),删除日志文件所在的目录名称(即:Dir1、Dir2 等)并在不同位置创建一个具有相同名称的目录(即 D :/Archive/Backups/Dir1, D:/Archive/Backups/Dir2, etc..) -- 假设目录不存在。
  • 将实际的 .log 文件移动到该目录中的一个 zip 文件 [我有执行此操作的代码]。
  • 从原始位置删除 .log 文件。 [非常简单]

我无法找出完成前 2 个步骤的最佳方法。阅读第一行后,我的 FOR 循环似乎停止了:

FOR /F "tokens=1,2,3,4,5,6,7,8,9,10 delims=\" %%G in ("results.txt") DO (
...
)

最佳答案

您不想使用 tokens/delims 选项解析路径,因为您不知道要处理的目录级别有多少。您希望完整保留每一行。要解析要使用 FOR 变量修饰符的路径。 (从命令行键入 HELP FOR 并查看输出的最后一部分)

%%~pG 给出路径(没有驱动器或文件名)。如果我们然后剥离最后一个 \,我们可以通过另一个 FOR 迭代并使用 %%~nxA 获取文件目录的名称(和可能的扩展名)。

延迟扩展的切换只是为了防止路径中可能出现 !。如果您知道没有路径包含 !,那么您可以简单地在脚本顶部启用延迟扩展并完成它。

编辑 - 自从 Aacini 指出我误解了要求后,此代码已进行了重大修改。现在应该可以满足要求了。

for /f "usebackq delims=" %%G in ("results.txt") do (
set "myPath=%~pG"
setlocal enableDelayedExpansion
for /f "eol=: delims=" %%A in ("!myPath:~0,-1!") do (
endlocal
if not exist d:\Archive\Backups\%%~nxA md d:\Archive\Backups\%%~nxA
rem ::zip %%G into zip file in the D: location
rem ::you should be able to create the zip with the move option
rem ::so you don't have to del the file
)
)

关于windows - 批处理文件中的循环读取文件路径文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8949090/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com