批处理脚本:查找子文件夹中的文件夹并获取文件夹路径

7
我正在尝试编写一个批处理文件,它将执行以下操作:
  1. 要求用户输入名称。如果没有给出名称,则再次询问。
  2. 从起始点(例如C:\ Temp)搜索所有子文件夹中的该名称。
  3. 如果找到,我希望将找到的文件夹及其所有内容移动到另一个目录中。
  4. 如果未找到,请告知用户未找到,并允许他们再次尝试或退出应用程序。
我没有找到这样脚本的示例或者组成部分来组合成一个完整的脚本。

我认为我的问题非常具体。让我们试试这个:
  1. 如何搜索C:\ Temp的所有子文件夹以查找名为“Apples”的文件夹?
  2. 如何捕获Apples文件夹路径,以便可以在移动命令中使用它(将“Path \ Apples”移动到“C:\ Temp2”)?
- PY_
请阅读help for并尝试for /d /r %a in (apples) do @echo move %a \temp - PA.
"阅读 HELP FOR 和 HELP IF。我不知道那是什么,也不知道如何进入。我尝试打开命令提示符并按 F1,但没有弹出任何内容。感谢您的回复,但如果能提供更多帮助而不仅仅是提示,将不胜感激。" - PY_
  1. 打开命令提示符。
  2. 输入“HELP FOR”。
  3. 阅读。
- PA.
1
  1. 打开命令提示符
  2. 输入 for /d /r %a in (apples) do @echo move %a \temp
  3. 完成
- PA.
2个回答

15
@echo off
for /d /r "c:\temp" %%a in (*) do if /i "%%~nxa"=="apples" set "folderpath=%%a"
echo "%folderpath%"

11
我知道这已经很古老了,但你能否详细说明每个部分的作用?当前的“答案”并没有真正帮助其他人。 - g19fanatic

0

分解foxidrive的答案

@echo off
for /d /r "c:\temp" %%a in (*) do if /i "%%~nxa"=="apples" set "folderpath=%%a"`
echo "%folderpath%"`

for循环参数

for /d /r "c:\temp" %%a in (*) do

/d 表示在文件夹集合中搜索文件夹(Directories)

/r 表示在特定路径下搜索文件 Rooted。在foxidrives的示例中,它是“c:\ temp”。/r 参数还期望一组文件作为 for 循环的条件。例如:

for ... (file1.*, another?.log) 

但在这种情况下,我们使用通配符 (*) 来查看所有内容

如果

if /i "%%~nxa"=="apples"

/i 表示在比较字符串时忽略大小写

%%~na 表示扩展 %%a 的文件名部分,但不包含完整路径

%%~xa 表示扩展 %%a 的文件名部分,但不包含文件扩展名(例如 .zip、.cmd、.exe)。尽管如此,在 for 部分中我们已经指定了 /d(仅限目录),因此它似乎是多余的。

因此,%%~nxa 仅显示文件夹名称,删除扩展名和完整路径。例如,如果在 %%a 中有 C:\some\path\myfile.ext,则 %%~nxa 将扩展为 myfile

来源

https://ss64.com/nt/for.html

https://ss64.com/nt/for_r.html

https://ss64.com/nt/syntax-args.html


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接