批处理脚本:使用forloops检查文件夹中是否存在文件

时间:2018-07-04 06:46:56

标签: batch-file pdf

我正在尝试找出与批处理文件位于同一文件夹中的文件。

文件夹中的文件就像

123.pdf 124.pdf 125.pdf 126.pdf

要检查的文件在nr.txt文件中列出,例如 124.pdf 126.pdf

如果文件存在,则应将文件复制到另一个文件夹nr,该文件夹与批处理位于同一文件夹,例如%〜dp0 \ nr \

这是我到目前为止得到的

@echo off
SET m=0
for /f %%G in ('dir *.pdf /b') do (for /f %%i in (nr.txt) do (
if %%i==%%G (
echo %%i found
::copy %%i %~dp0\nr\
) else (
SET m=1
echo %m%
)
)
if %m%==1 (
echo %%i not found
SET m=0
)
)
pause

我的问题是,SET m = 1没有设置变量。

预先感谢您的帮助

编辑:

谢谢,我越来越近了。

@echo off
SETLOCAL EnableDelayedExpansion
SET m=0
for /f %%i in (nr.txt) do (for /f %%G in ('dir *.pdf /b') do (
if /I %%i==%%G (
echo %%i found
) else (
SET m=1
)
)
if !m!==1 (
echo %%i not found
SET m=0
)
)
pause

H:\Neuer Ordner (2)>check.bat
123.pdf found
123.pdf not found
126.pdf found
126.pdf not found
128.pdf not found

问题是,它仍然告诉我它找不到123.pdf,但确实存在。它找到了一次。

我尝试切换for循环,但问题相同。

问题是,它将遍历Dir中的所有文件并进行匹配。它将匹配但始终不匹配。我知道如何在文件存在的情况下仅显示查找消息吗?

非常感谢您

1 个答案:

答案 0 :(得分:0)

您可能可以从这样的批处理文件中进行操作:

@For /F Delims^=^ EOL^= %%A In ('Type "nr.txt"') Do @XCopy "%%~A" "nr\" /Y >Nul 2>&1

如果您想要不必要的Echo是:

@Echo Off
For /F Delims^=^ EOL^= %%A In ('Type "nr.txt"') Do If Exist "%%~A" (
    Echo %%A Found
    XCopy "%%~A" "nr\" /Y >Nul 2>&1) Else Echo %%A Not Found
Pause