gpt4 book ai didi

windows - 在txt文件中循环并使用批处理文件列出内容

转载 作者:可可西里 更新时间:2023-11-01 11:46:57 31 4
gpt4 key购买 nike

我正在尝试遍历一个 .txt(例如 folder_list.txt)文件,其中每一行都包含路径,例如:

/subdir/folder/node-folder
/subdir/folder/node-folder-2
/subdir-2/folder4/node-folder/node-folder-1

我需要使用 pushd 命令连接到网络驱动器,然后逐行迭代到 txt 文件中的所有这些路径,然后仅列出具有特定格式的文件,如“.html ,.htm,.pdf,.txt".

假设我这样做了

pushd \\mynetworkdrive\rootfolder

我的网络驱动器被映射为 Z:

这是我创建的批处理文件:

@echo on
cls
cd /d "Z:\"
for /F "tokens=*" %%A in (C:\Users\user1\Desktop\network\folder_list.txt) do (
set location = %%A
cd location
@echo %location%
dir /S/Q *.htm,*.html,*.aspx,*.asp,*.php >> C:\Users\user1\Desktop\network\files_search_output.csv
)
echo "cd\"
pause

然而,循环开始了,它遍历了网络驱动器的所有目录,而不是我的 folder_list.txt 文件中的目录。

不知道我错在哪里。我做了很多研究来寻找可能的解决方案,但是无法找到问题的原因

最佳答案

@echo on
cls
cd /d "Z:\"
for /F "tokens=*" %%A in (C:\Users\user1\Desktop\network\folder_list.txt) do (
pushd %%A
echo %%A
dir /S/Q *.htm,*.html,*.aspx,*.asp,*.php >> C:\Users\user1\Desktop\network\files_search_output.csv
popd
)
echo "cd\"
pause

第一个问题 - 字符串 set=两侧 空格都很重要。因此,您将值分配给“locationSpace

第二个问题 - 如果您在代码块(带括号的命令序列)中改变普通环境变量(如 location)的值,则需要使用延迟扩展 - 在 SO 上查看有关此主题的无穷无尽的文章。

接下来 - 中间的 cd 没有效果,因为 location 在遇到 for 关键字时 没有定义

接下来 - 您的 cd 回到 root 只是被 echoed(我离开了)

简单的方法 - 不需要 cds - PUSHD 所需的目录,当你在该目录中完成命令时,POPD 返回到执行 PUSHD

时所在的目录

潜在问题:winbatch 中路径的分隔符是 \ - / 用作开关指示器。 有时 winbatch 会进行转换。其他的,不是。

如果文件中确实有 /,那么您确实需要将变量从 %%A 转移到常规变量,因为元变量上的字符串操作不是支持,因此您可能需要

  1. 插入一行

    设置本地启用延迟扩展

@echo off 行之后

  1. 变回

设置“location=%%A”
设置“位置=!位置:/=!”
推!位置!

setlocal enabledelayedexpansion 命令调用延迟扩展 模式,其中 !var! 提取当前(运行时) 变量的值(而 %var% 是 block 被解析时的值)

以下 set 将变量值内的 / 更改为 \。引号确保分配的值中不包含任何尾随空格。

请注意,@ 只是抑制了默认的“将命令回显到屏幕”模式。 @echo off 关闭 echo-command-to-screen(自从 @ 启动后,它本身就被抑制了)。此后无需在批处理中使用 @echo

关于windows - 在txt文件中循环并使用批处理文件列出内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42639513/

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