我试图通过包含每行中的path的.txt(例如folder_list.txt)文件循环,如:
/subdir/folder/node-folder /subdir/folder/node-folder-2 /subdir-2/folder4/node-folder/node-folder-1
我需要使用pushd命令连接到networking驱动器,然后逐行遍历txt文件中的所有这些path,然后仅列出特定格式的文件,如“ .html, .htm, .pdf, .txt”。
假设,当我这样做
pushd \mynetworkdriverootfolder
我的networking驱动器被映射为Z:
可能“循环”和“输出”不能在我的bash脚本中正常工作
在按下键时停止C ++中的无限循环
这是我创build的batch file:
@echo on cls cd /d "Z:" for /F "tokens=*" %%A in (C:Usersuser1Desktopnetworkfolder_list.txt) do ( set location = %%A cd location @echo %location% dir /S/Q *.htm,*.html,*.aspx,*.asp,*.PHP >> C:Usersuser1Desktopnetworkfiles_search_output.csv ) echo "cd" pause
循环开始,但它遍历networking驱动器的所有目录,而不是那些在我的folder_list.txt文件中。
不知道我在哪里不正确。 我做了大量的研究,find可能的解决scheme,但无法解决问题的原因
如何在for循环内dynamic引用数组? 批量
Cmultithreading处理,意外的cpu消耗
如何循环通过命令的输出?
在读取行时,awk $行带有多个分隔符
@echo on cls cd /d "Z:" for /F "tokens=*" %%A in (C:Usersuser1Desktopnetworkfolder_list.txt) do ( pushd %%A echo %%A dir /S/Q *.htm,*.PHP >> C:Usersuser1Desktopnetworkfiles_search_output.csv popd ) echo "cd" pause
第一个问题 – 在一个字符串set , 两个空格是重要的。 因此,您将值分配给“位置空间 ”
第二个问题 – 如果在一个代码块(括号内的命令序列)内改变一个普通的环境变量(比如location )的值,你需要使用delayed expansion – 在SO上查看关于这个主题的无尽的文章。
接下来,中间的cd没有任何效果,因为在遇到for关键字时没有定义location
接下来 – 你的cd回到根目录只是echo (我离开了)
简单的方法 – 不需要cd s – PUSHD所需的目录,当您完成该目录中的命令时, POPD回到执行PUSHD时所在的PUSHD
潜在的问题:winbatch中的路径分隔符是 – /被用作开关指示符。 有时候winbatch做转换。 其他,不是。
如果你真的拥有/在文件中,那么你确实需要将变量从%%A传递给一个常规变量,因为对元变量的字符串操作不被支持,所以你可能需要
插入一行
setlocal enabledelayedexpansion
在@echo off后
改回
set "location=%%A" set "location=!location:/=!" pushd !location!
setlocal enabledelayedexpansion命令调用delayed expansion模式,其中!var! 提取变量的当前 (运行时间)值(而%var%是块被解析时的值)
在变量的值内,以下set将更改为 。 引号确保任何尾部空格不包含在赋值中。
请注意@简单地抑制默认的“回显命令到屏幕”模式。 @echo off关闭echo-command-to-screen(自启动@自身被抑制)。 此后不需要在批处理中使用@echo 。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。