【问题标题】:windows batch, setting a variable inside a nested loopWindows批处理,在嵌套循环中设置变量
【发布时间】:2012-12-02 11:40:36
【问题描述】:

我有以下批处理从文本文件中读取数据,问题出在内部循环中;它应该在目标文件夹中获取 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

感谢您的帮助。 谢谢。

【问题讨论】:

    标签: windows loops batch-file command nested


    【解决方案1】:

    如果您在for 正文中使用集合,则需要enabledelayedexpansionhttp://www.robvanderwoude.com/variableexpansion.php

    编辑:

    :: 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
    

    【讨论】:

    • 啊哈,谢谢你的回复……我明天一到办公室就试试,让你知道会发生什么
    • 嗨再次,它没有工作,我把这句话放在循环之前和循环内,只要它在循环内并且当我在循环完成后使用它时,值就会改变;我得到一个空值。
    • 您是否使用 !variable! 更改了变量访问权限!而不是 %variable% ?
    【解决方案2】:

    @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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-04-14
      • 1970-01-01
      • 2018-02-14
      • 1970-01-01
      • 2011-05-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多