簡體   English   中英

windows批處理,在嵌套循環內設置變量

[英]windows batch, setting a variable inside a nested loop

我有以下批處理從文本文件中讀取數據,問題出在內部循環中; 它應該在目標文件夾中獲取 lat 創建的文件,但它什么也沒有!

這是我的代碼:

:: Delete Files from folder
@echo off
:: Delete Files from folder
echo y | del "E:\HIS_Data_Consolidation\HIS_Backups\*.bak" 
echo Deleting previous bak files...
set destdir=E:\HIS_Data_Consolidation\HIS_Backups
setlocal
FOR /F "tokens=1,2,3 delims=," %%G IN (clinics.txt) DO (
pushd "%%G"
for /F  "tokens=*" %%a in ('dir *.* /b /a-d /o:e 2^>NUL') do (
set lfile=%%a
)
echo copying "%%G\%lfile%" to "%destdir%" ,,,%%H
copy /y "%%G\%lfile%" "%destdir%
E:
cd "%destdir%
E:\HIS_Data_Consolidation\HIS_Backups\unrar.exe e "%destdir%/%lfile%"
echo y | del "E:\HIS_Data_Consolidation\HIS_Backups\*.rar" 
echo Deleting RAR file...
SET v_test=%lfile%
SET v_result=%v_test:rar=bak%
ren "%v_result%"  "%%I"
echo Ready ...
popd
)
pause

感謝您的幫助。 謝謝。

如果你在 body 里面使用了一個 set for你需要enabledelayedexpansionhttp : enabledelayedexpansion

編輯:

:: Delete Files from folder
@echo off
:: Delete Files from folder
echo y | del "E:\HIS_Data_Consolidation\HIS_Backups\*.bak" 
echo Deleting previous bak files...
set destdir=E:\HIS_Data_Consolidation\HIS_Backups

setlocal enabledelayedexpansion
FOR /F "tokens=1,2,3 delims=," %%G IN (clinics.txt) DO (
    pushd "%%G" 
    for /F  "tokens=*" %%a in ('dir *.* /b /a-d /o:e 2^>NUL') do (
        set lfile=%%a
    )
    echo copying "%%G\!lfile!" to "!destdir!" ,,,%%H
    copy /y "%%G\!lfile!" "!destdir!"
    E:
    cd "!destdir!"
    E:\HIS_Data_Consolidation\HIS_Backups\unrar.exe e "!destdir!/!lfile!"
    echo y | del "E:\HIS_Data_Consolidation\HIS_Backups\*.rar" 
    echo Deleting RAR file...
    SET v_test=!lfile!
    SET v_result=!v_test:rar=bak!
    ren "!v_result!"  "%%I"
    echo Ready ...
    popd
)
endlocal
pause

@npocmaka 謝謝! 你解決了我工作了幾個小時的問題! 我有一個類似的問題。

我正在使用嵌套的 for 循環並嘗試將 for 循環拆分為另一個批處理文件,但沒有奏效。 所以我使用了 'npocmaka 的建議:

這是被調用的批處理,它位於另一個 for 循環內。

@ECHO OFF


SET dir=%~1
SET suf=%~2

ECHO IN dir:%dir%
ECHO IN suf:%suf%
PAUSE

SET /A count=1

SETLOCAL EnableDelayedExpansion
pushd %dir%
FOR /R . %%A IN (*.%suf%) DO (

    ECHO File: %%~nxA count:!count!
    PAUSE
    REN %%~nxA !count!.txt
    CALL :increment RESULT count
)
popd
ENDLOCAL


:increment
SET /A count+=1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM