【问题标题】:How to do while loop in windows batch如何在Windows批处理中执行while循环
【发布时间】:2015-01-17 22:24:58
【问题描述】:

我编写了一个 Windows 批处理脚本来根据我放入名为 list.txt 的记事本文件中的列表检查文件并将其移动到另一个目录。但我不知道如何设置while循环。只有条件满足才跳出子路由。

在 C 编程中,我们可以通过直接设置 while 循环来编写这样的代码。但似乎在 windows 批处理中是完全不同的。

我想要的是这样的:

目录A:

 1. A.txt 
 2. B.txt 
 3. list.txt (By line sequential with filename want to move) 
 4. process.bat

目录 B:

  1. 没有文件(然后按 list.txt 中设置的行顺序移动文件)或
  2. A.txt(如果目录中已经存在文本文件,则process.bat会在A.txt消失之前暂停)

Process.bat

@echo off

:readline
for /f "tokens=*" %%a in (list.txt) do call :processline %%a

goto :eof

:processline
if exist D:\DirectoryA\*.txt (
echo %time% >> D:\AutoLog\Log.txt
echo Previous job did not finished yet. >> D:\AutoLog\Log.txt
Timeout /t 30 
echo.
)
set name=%*
if exist %name%.txt (
echo %time% >> D:\AutoLog\Log.txt
echo File found and processing   %name%.txt   now... >> D:\AutoLog\Log.txt
copy "%~dp0\%name%.txt" "D:\DirectoryB"
echo Transfer   %name%.txt   completed!! >> D:\AutoLog\Log.txt
echo. >> D:\AutoLog\Log.txt
Timeout /t 790
echo.
echo ==============================================================
)

:eof

请指导我使用 while-loop 方法完成脚本。谢谢

【问题讨论】:

标签: batch-file for-loop while-loop cmd timeout


【解决方案1】:

我更改了一些脚本序列,它现在可以工作了。

@echo off

:readline
for /f "tokens=*" %%a in (list.txt) do call :processline %%a

goto :eof

:processline
set name=%*
if exist C:\Test2\*.txt (
        echo %date% %time% >> C:\Test2\Log.txt
        echo Previous job did not finished yet. >> C:\Test2\Log.txt
        Timeout /t 5
        echo.
        echo. >> C:\Test2\Log.txt
        goto :processline
         )
if exist %name%.txt (
echo %date% %time% >> C:\Test2\Log.txt
echo File found and processing   %name%.txt   now... >> C:\Test2\Log.txt
copy "%~dp0\%name%.txt" "C:\Test2"
echo Transfer   %name%.txt   completed!! >> C:\Test2\Log.txt
echo. >> C:\Test2\Log.txt
Timeout /t 10
echo.
echo ==============================================================
)

:eof

【讨论】:

    【解决方案2】:

    这将复制并计算文本文件中的行数..

    @ echo off 
    :TextPath
    cls
    set /p Input=#1 Enter the full path of the text file :
    set /p Source=#2 Enter the full path of Source :
    set /p Target=#3 Enter the full path of Destination :
    
    :choice
    set /P c=Ready to Continue[Y/N]?
    if /I "%c%" EQU "Y" goto :Yes
    if /I "%c%" EQU "N" goto :No
    goto :choice
    
    :Yes_Local
    for /f "delims=" %%i in (%Input%) do echo f| xcopy /f /y  "%Source%\%%i" "%Target%\%%i"
    for /f %%C in ('Find /V /C "" ^< %Input%') do set Count=%%C
    msg * No of Lines executed= %Count%
    exit
    
    :No
    cls
    color e
    echo Redirecting to Main....
    PING 127.0.0.1 -n 2 >NUL
    cls
    echo Please wait
    PING 127.0.0.1 -n 4 >NUL
    goto TextPath
    

    【讨论】:

    • 它将复制并计算文本文件中的行数... :)
    猜你喜欢
    • 2016-07-08
    • 2017-06-15
    • 2010-11-24
    • 2017-03-25
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多