Windows Batch - For Loop - NOT IN

时间:2013-09-03 11:45:28

标签: windows cmd

使用Windows Batch For Loop的大多数示例都是关于使用“IN”。

FOR %%A IN (1 2 3 4) DO ECHO %%A

我需要使用NOT IN代替。当我输入的内容为:

FOR %%A NOT IN (1 2 3 4) DO ECHO %%A

它说“当时没有预料到”。

由于

4 个答案:

答案 0 :(得分:0)

根据您的上述评论,您希望拥有“没有这些文件的DIR”? 然后这应该工作:

<强>&GT;输入donotuse.txt

alpha.txt
beta.exe
gamma.cmd

<强>&GT;输入t.bat

@dir /b | findstr /b /e /v /i /l /g:donotuse.txt

<强>&GT; dir / b

albetade.txt
alpha.exe
alpha.txt
beta.exe
donotuse.txt
gamma.cmd
t.bat

<强>&GT;吨

albetade.txt
alpha.exe
donotuse.txt
t.bat

&GT;

编辑:dbenham是对的。已将/i /l添加到我的代码中。

答案 1 :(得分:0)

for %%F in ('dir /b /a-d "somepath\*"^|findstr /vilxg:"exclusions.txt"') do echo %%F

由于您在评论中表示要移动不在列表中的文件,因此应尝试使用ROBOCOPY。查看/MOV/XF选项。它应该允许您以更直接的方式完成您想要的操作。从命令行键入robocopy /?以获取帮助。导航有很多选项,因此可能需要一段时间才能获得您想要的确切结果。但这个命令非常强大而且值得。

答案 2 :(得分:0)

比尔,这可能会做你需要的,或者给你一个提示......

@echo off
for /f "delims=" %%a in (' type "file.txt" ') do (
if not exist "c:\target\%%a" move "%%a" "c:\target"
)

答案 3 :(得分:0)

我遇到了同样的问题,但没有解决方案。 所以...这是我个人的,简单的解决方案:

@echo off
rem set the path to check
set sourcePath=C:\Program Files (x86)\MySoftware
set destPath=c:\temp\MySoftware-StrangerFiles
set tempPath=c:\temp
set currentFilesListTxtFileName=MySoftware-allfiles.txt
set correctFilesListTxtFileName=MySoftware-correctFilesList.txt
set moveFilesListTxtFileName=MySoftware-moveFilesList.txt
echo Move not allowed files in a different path
cd "%sourcePath%"
mkdir %destPath%

call :correctFilesList

dir /B > c:\temp\MySoftware-allfiles.txt
findstr /V /G:%tempPath%\%correctFilesListTxtFileName% %tempPath%\%currentFilesListTxtFileName% > %tempPath%\%moveFilesListTxtFileName%
for /f "delims=" %%a in (' type "%tempPath%\%moveFilesListTxtFileName%" ') do move %%a %destPath%
pause

:correctFilesList
rem files whitelist
rem correctfiles can be changed with "dir /B path>>c:\temp\correctFilesList.txt" from a correct source. Or you can generate a list of correct files via command as below.
echo correctfile1.dll>> %tempPath%\%correctFilesListTxtFileName%.txt
echo correctfile2.log.xml>> %tempPath%\%correctFilesListTxtFileName%.txt
echo correctfile2.log.xml>> %tempPath%\MySoftware-correctFilesList.txt