我尝试循环数组中的所有源文件,并确保它在我设置的文件路径的文件夹中退出,下面是我的代码
@echo OFF
setlocal EnableExtensions EnableDelayedExpansion
set "string_list=A.txt B.txt C.txt D.txt"
set count=0
For %%j in (%string_list%) Do Set /A count+=1
rem echo.Total count: %count%
set current_count=0
REM for %%s in (%string_list%) do (
for %%s in (%string_list%) do (
set "var=C:\Users\ABC\Desktop\TESTING\%%s"
rem echo "!var!"
:START
if not exist "!var!" GOTO WAIT
GOTO COPY
:WAIT
timeout 5
ECHO "MISSING !var!, WAITING SOURCE FILE TO LOAD IN"
GOTO START
:COPY
ECHO "!var! FILES IS AVAIALBLE"
set /A current_count+=1
if /I %current_count%==%count% (
echo "ALL THE FILE IS IS AVAILABLE"
) else (
echo "CONTINUE CHECK FOR OTHER FILE"
)
)
rem echo %current_count%
pause
一旦找到第一个文件,它将退出循环。代码是检查并确保所有文件都在文件夹中,如果其中一个文件不存在,则继续循环,直到文件存在。
我不确定该函数是否可以在FOR循环中添加。
我期待着这个:
中
C:\Users\ABC\Desktop\TESTING\A.txt FILES IS AVAILABLE
< - A.txt位于文件夹等待0秒,按一个键继续......
但我得到了这个:
MISSING C:\Users\ABC\Desktop\TESTING\B.txt, WAITING SOURCE FILE TO LOAD IN
< - B.txt第一次不在文件夹中。
C:\Users\ABC\Desktop\TESTING\B.txt FILES IS AVAIALBLE
< - B.txt位于第二个循环的文件夹中
C:\Users\ABC\Desktop\TESTING\C.txt FILES IS AVAIALBLE
< - C.txt位于文件夹
C:\Users\ABC\Desktop\TESTING\D.txt FILES IS AVAIALBLE
< - D.txt位于文件夹
只有当所有文件都在文件夹中时,循环才会退出,否则它将继续循环。
答案 0 :(得分:3)
这是一个非常复杂的方法,无法完成一项非常简单的任务! (哦,好吧 - 我们都必须从某个地方开始)
如果说明了代码的实际目标,那将会有所帮助。事实上,我们有一个方法失败(否则毫无疑问)完成任务 - 我们必须分析代码以确定所需的任务。
从根本上说,代码失败是因为code block
(带括号的命令序列)中不允许使用标签。
@echo OFF
:: switch to the destination directory as exit is required with tat directory current
cd /d "C:\Users\ABC\Desktop\TESTING"
setlocal EnableExtensions EnableDelayedExpansion
set "string_list=A.txt B.txt C.txt D.txt"
:wait
timeout /t 5 >nul
cls
for %%j in (%string_list%) do if exist "%%~j" (
echo "%%~j" exists
) else (
echo "%%~j" missing
goto wait
)
echo all files found
显然,如果需要,可以在柜台加入。我添加了cls
以减少屏幕混乱。如果需要,请省略。
所以 - 对于每个指定的文件(因为我们首先更改为所需的目录),看看它是否存在。如果是,请报告。否则报告它丢失并等待。重复直到找到所有。
答案 1 :(得分:1)
正如我在评论中所说的goto打破循环请参考
Batch script for loop not working
使用子程序来获得你想要的东西。我修改了以下脚本,它适用于你的情况:
@echo OFF
setlocal EnableExtensions EnableDelayedExpansion
set string_list=A.txt B.txt C.txt D.txt
set count=0
For %%j in (%string_list%) Do Set /A count+=1
echo.Total count: %count%
set current_count=0
FOR %%s in (%string_list%) DO call :workProc %%s
exit /b
:workProc
set "var=%1"
echo "hey"
echo "!var!"
:START
if not exist !var! GOTO WAIT
GOTO COPY
:WAIT
timeout 5
ECHO "MISSING !var!, WAITING SOURCE FILE TO LOAD IN"
GOTO START
:COPY
ECHO "!var! FILES IS AVAIALBLE"
set /A current_count+=1
if /I %current_count%==%count% (
echo "ALL THE FILE IS IS AVAILABLE"
) else (
echo "CONTINUE CHECK FOR OTHER FILE"
pause )
)
exit /b
rem echo %current_count%