【发布时间】:2014-09-10 15:19:43
【问题描述】:
我在以下搜索中有些挣扎。 我需要查找错误放置在错误文件夹中的文件。我有以下测试结构(实际上它是数以百计的文件夹):
C:\test2\John\John_phone.txt
C:\test2\Mary\John_address.txt
C:\test2\Mary\Mary_address.txt
C:\test2\Mary\Mary_phone.txt
C:\test2\Mary\Peter_address.txt
文件 John_address.txt 和 Peter_address.txt 放错地方在 Mary 的文件夹中。我想检查 Mary 的文件夹中是否有任何放错位置的文件,并将它们列在单独的日志文件中。因此,对于上面的示例,日志将包含两个放错位置的文件的名称(路径),决定性标识符是人名。我有这段代码:
@echo off
cls
set /p name="Specify the name: "
::forfiles /p "%CD%\%name%" /s /m *.* /c "cmd /c echo @path">>log.txt
forfiles /p "%CD%\%name%" /s /m "| findstr /i /v "\*%name%*"" /c "cmd /c echo @path">>log.txt
pause
forfiles 的注释行有效(列出文件夹中的所有文件),所以我对 findstr 有疑问:错误:找不到类型为“| findstr /i /v *Mary*”的文件。 带有 findstr 的 /v 开关应该找到所有不包含指定名称的文件,但显然我在将它用作 forfiles 的输入时做错了。 我不想使用 dir 命令,因为它列出了其他信息,我需要将输出集成到更大的日志文件中(我只需要获取放错位置的文件的路径)。
感谢任何帮助。 谢谢。
编辑:如果像这样固定正确的文件名,编写代码会更容易吗?
All_data_%NAME%_new.txt
名称前后的内容将被固定,文件名的这种格式将是唯一正确的选项,因此必须报告其他任何内容。
【问题讨论】:
标签: batch-file pipeline findstr