我很苦恼下面的搜索。 我需要查找错误文件夹中错误放置的文件。我有以下的测试结构(在现实中,它是文件夹的hudreds):findstr在win7批处理文件中的文件名
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的文件夹是否有任何错位的文件,并将它们列在单独的日志文件中。因此,对于上面的例子,日志将包含两个错位文件的名称(路径),决定标识符是该人的名字。我有这样一段代码:
@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 *玛丽*“找不到。 带有findstr的/ v开关应该找到所有不包含指定名称的文件,但显然我在将它用作forfiles的输入时出错。 我不想使用dir命令,因为它列出了额外的信息,我需要将输出集成到较大的日志文件中(我只需要获取错位文件的路径)。
任何帮助表示赞赏。 谢谢。
编辑:如果正确的文件名将被修复,编写代码会更容易吗?
All_data_%NAME%_new.txt
的东西之前和之后的名称将是固定的,文件名的格式将是唯一正确的选项,所以别的就纷纷予以报道。
嗨@ mc-nd,谢谢你的回答。这部分工作。以上批次仅列出c:\ test2 \ Mary \ John_address.txt,但它并未列出Peter_address.txt - Peter的文件夹不在根目录中。此外,它应该工作列表文件,完全不正确的名称像address_Mary.txt或Mray_address.txt。我可以使用(names_list.txt)中的for/f %% i来获取列表中循环的正确名称列表(...用户无法更改文件夹名称,但可以上传他们想要的任何内容。我看到我应该早些指明这一点。谢谢。 – karl 2014-09-10 16:46:17
@karl,管道解决方案中出现了一个BIG错误,删除了这个简单的解决方案,可以毫无问题地工作,无论如何,我会尽力在最初的想法下解决它,谢谢。 – 2014-09-10 17:03:29
@karl,答案已更新。包含一个更灵活的文件/文件夹匹配。 – 2014-09-10 19:54:30