其他资源:

其他资源:

我正在创建一个批处理文件,它运行正常,然后,突然间,它开始抛出一个错误,这让我摸不着头脑,达到了我无知的极限。

我将批处理文件缩减到最小值以在我的计算机上复制错误:

@echo off

setlocal enabledelayedexpansion
set "exclFolder=%UserProfile%\OneDrive\"

:: Lists all the common image files in the HD

for /R %%f IN (*.jpeg;*.jpg;*.bmp;*.gif;*.png;*.ico;*.webp) DO (
    
    :: Ignores any file in the OneDrive folder
    
    set "fileName=%%~nxf"
    echo %%f | findstr /i /c:"!exclFolder!" > nul
    if errorlevel 1 (
         echo %%f
        )
    )

这是在我的计算机上执行的示例:

>Test.bat
The system cannot find the drive specified.
C:\Users\User\.nuget\packages\kgysoft.corelibraries\7.1.0\Icon64.png

The system cannot find the drive specified.
C:\Users\User\.nuget\packages\kgysoft.drawing\7.2.0\Icon64.png

The system cannot find the drive specified.
C:\Users\User\.nuget\packages\kgysoft.drawing.core\7.2.0\Icon64.png

我以为这会是一件简单的事情,但是这个奇怪的错误却让我的思维陷入混乱。

答案1

@echo off && SetLocal EnableDelayedExpansion

cd /d "%~dp0" || exit /b 

set "_ExclFolder=\%UserName%\OneDrive\"

for /r %%f in (*.jpeg;*.jpg;*.bmp;*.gif;*.png;*.ico;*.webp)do =;(
     set "_FileName=%%~nxf"
     echo/"%%~f" | findstr /ic:"!_ExclFolder!" >nul || echo/"%%~f"
    );=

endlocal

无法解释“The system cannot find the drive specified.”
如何解决? -echo "I have no idea!" | findstr "....


echo Double quotes do not go on vacation, you can use them all year round
echo "%%~f" | ...

如果文件 *姓名包含不属于字母数字的字符,并且可能属于特殊字符组的一部分,那么可能会发生一些破坏,使命令解释器感到困惑,并使其寻找无法找到的文件,或者您的 bat 从与应运行的位置不同的位置启动,并且没有搜索到的扩展名中的文件,它会返回到连贯性The system cannot find the drive specified.


我会采取不同的做法...


@echo off

cd /d "%~dp0" || exit /b 
set "_aVoid=.*\\OneDrive\\.*"
set "_eXt=*.jpeg *.jpg *.bmp *.gif *.png *.ico *.webp"

for /f usebackq^delims^= %%i in =;(
   `where /r .\ %_eXt% ^| findstr /Vi %_aVoid%
   `);= do =;(
      set "_fName=%%~nxi"
      set "_fullPath=%%~fi"
      call echo/"%%_fullPath%%" "%%_fName%%"
    );=

1.进入包含该批次的文件夹cd /d "%~dp0"如果不是\working\folder,则指向完整路径:


cd /d "D:\The\Full\Path\Folder"

2.For /R用。。。来代替For /F

for /f `...  %%f in (`commmad ^| findsrt ...

3.使用(总是列出Where /Recursive文件避免\文件夹

for /f ...(` Where /r .\ *.jpeg *.jpg *.bmp *.gif *.png *.ico *.webp ^| ...

4.带给你findstr /Avoid String in循环(command)

for /f ...(` ... ^| findstr /vi .*\\%UserName%\\OneDrive\\.*

5.随时随地使用循环输出

`);= do set "_fName=%%~nxf" && call echo/"%%_fName%%"  

@echo off

cd /d "%~dp0" || exit /b 
set "_aVoid=.*\\OneDrive\\.*"
set "_eXt=*.jpeg *.jpg *.bmp *.gif *.png *.ico *.webp"

for /f usebackq^delims^= %%i in =;(`where /r .\ %_eXt% ^| findstr /vi %_aVoid%
   `);= do set "_fName=%%~nxi" & set "_fullPath=%%~fi" && call echo/"%%_fullPath%%" "%%_fName%%"  


其他资源:


相关内容