我正在创建一个批处理文件,它运行正常,然后,突然间,它开始抛出一个错误,这让我摸不着头脑,达到了我无知的极限。
我将批处理文件缩减到最小值以在我的计算机上复制错误:
@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%%"
其他资源:
Cd
|ChDir
FindSTR /?
For /?
For /F /?
- 条件执行
- 命令重定向
|
,<
,>
,2>
, ETC。
- 转义字符
- Windows 命令解释器如何
cmd.exe
解析脚本