使用批处理文件我试图在包含特定文件类型的位置生成仅包含文件夹的列表,让我们调用它* .abc
目前我只知道如何将DIR命令输出回显到名为folder.lst的文件,我想扩展它并尝试
a)仅回显包含* .abc文件类型到folder.lst的文件夹 b)删除folder.lst中不包含* .abc文件类型的文件夹中的引用。
我也尝试过FOR循环检查每一行以查看该位置是否存在* .abc文件并跳过它,如果没有,但是我无法让它工作,这是我的一个例子
setlocal enableextensions enabledelayedexpansion
FOR /F "delims=" %%C in (folder.lst) do (
set temp=%%C
if not exist !temp!\*.abc (goto skip) else (goto resume)
:resume
然后我的行动就住在这里
:skip
)
但我知道我在这里做错了...我只是不知道是什么。
答案 0 :(得分:0)
/R
命令的for
形式可能会有所帮助:
for /r "basedir" %%a in (.) do if exist "%%~a\*.abc" (
echo %%a contains .abc file(s)
)
%%a
将是您想要的目录(尾随\.
,但您应该无需关心或适应此目的。)
答案 1 :(得分:0)
从命令行:
for /f "delims=" %a in ('dir /s /b *.abc') do echo %~dpa >> folders.lst
在批处理文件中:
for /f "delims=" %%a in ('dir /s /b *.abc') do echo %%~dpa >> folders.lst
上述命令只会在*.abc
中放置包含folders.lst
个文件的文件夹名称。
备注强>:
%
应由%%
替换。
~dp
的{{1}}部分仅将%~dpa
扩展为驱动器号和路径。如果您不想要驱动器号,请删除%a
。 d
路径包含尾随p
,可能会被某些命令解释为转义字符。
上述命令在当前目录中开始搜索。要从当前驱动器的根目录进行搜索,您可以先\
进行搜索。
有关详细信息,请参阅FOR /F Loop command: against the results of another command和Parameters。
答案 2 :(得分:0)
您发布的脚本存在问题,您可以在块语句中使用标签。您还没有提供任何示例。
@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
SET "sourcedir=U:\sourcedir"
SET "lastdir="
FOR /r "%sourcedir%" %%a IN (*.abc) DO IF "!lastdir!" neq "%%~dpa" (
SET "lastdir=%%~dpa"
ECHO %%~dpa
echo "!lastdir:~0,-1!"
)
GOTO :EOF
找到的每个目录都会echo
两次 - 一个包含尾随\
,另一个没有。
您需要更改sourcedir
的设置以适合您的具体情况。
答案 3 :(得分:0)
@echo off
setlocal enableextensions disabledelayedexpansion
set "root=%cd%"
for %%a in ("%root%") do for /f "delims=: tokens=2" %%b in ('
dir /a-d /s "%root%\*.abc" ^| find "\"
') do echo(%%~da%%~pnxb
执行递归dir
命令,在起始点搜索指定的文件类型(更改root
变量以满足您的需要)。对于每个找到的文件夹,我们从文件列表前面的dir
标题中检索文件夹(包含反斜杠的行)。
要将路径与行中的其余信息分开,冒号将用作分隔符。由于这会使驱动器脱离检索到的信息,因此使用aditional for
从文件夹引用中检索驱动器。