【问题标题】:Windows command batch file calling variable from string in nested loopWindows命令批处理文件从嵌套循环中的字符串调用变量
【发布时间】:2021-02-17 15:51:34
【问题描述】:

我正在尝试在批处理文件循环中实现此命令

md Documents
md Spreadsheets
md Medias
md Applications
md Archives
md Scripts
md Database
md Projects
md Tutorials

清理文档

move *.pdf  Documents
move *.doc* Documents
move *.ppt* Documents
move *.txt Documents
move *.draw* Documents
move *.msg* Documents

清理电子表格

move *.csv Spreadsheets
move *.xls* Spreadsheets
move *.xml* Spreadsheets

清理媒体

move *.psd Medias
move *.png Medias
move *.jp* Medias
move *.gif Medias
move *.tiff Medias
move *.mp* Medias
move *.avi Medias

清理应用程序

move *.exe Applications
move *.msi Applications
move *.iso Applications
move *.vsix Applications

清理档案

move *.zip Archives
move *.rar Archives
move *.7z Archives
move *.tar Archives

清理脚本

move *.cs Scripts
move *.js Scripts
move *.css Scripts

清理数据库文件

move *.sql Database
move *.bak Database
move *.accdb Database

尝试使用 FOR 循环实现与上述相同的目的,并从文档电子表格等 SET 变量的内部循环中获取扩展。

变量

SETLOCAL
SET Folders=Documents Spreadsheets Medias Applications Archives Scripts Database
SET Documents=*.pdf *.doc* *.ppt* *.txt *.draw* *.msg*
SET Spreadsheets=*.csv *.xls *.xml
SET Medias=*.psd *.png *.jp* *.gif *.tif *.mp* *.avi *.mov
SET Applications=*.exe *.msi *.vsix *.iso 
SET Archives=*.zip *.rar *.7z *.tar 
SET Scripts=*.cs *.js *.css
SET Database=*.sql *.bak *.accdb

循环

FOR %%f IN (%Folders%) DO 
(
    ECHO %%f
    FOR %%e IN (%%%%f%%) DO (
        ECHO    %%e %%f 
    )
)

TIMEOUT /t 10
CLS

循环的输出是这样的

Documents
    %Documents% Documents 
Spreadsheets
    %Spreadsheets% Spreadsheets
Medias
    %Medias% Medias
Applications
    %Applications% Applications
Archives
    %Archives% Archives 
Scripts
    %Scripts% Scripts
Database
    %Database% Database

【问题讨论】:

    标签: windows for-loop batch-file nested


    【解决方案1】:

    您非常接近,但写一个明确的百分号并不能支付账单。请改用delayed expansion:

    @echo off
    setlocal enabledelayedexpansion
    
    SET Folders=Documents Spreadsheets Medias Applications Archives Scripts Database
    SET Documents=*.pdf *.doc* *.ppt* *.txt *.draw* *.msg*
    SET Spreadsheets=*.csv *.xls *.xml
    SET Medias=*.psd *.png *.jp* *.gif *.tif *.mp* *.avi *.mov
    SET Applications=*.exe *.msi *.vsix *.iso 
    SET Archives=*.zip *.rar *.7z *.tar 
    SET Scripts=*.cs *.js *.css
    SET Database=*.sql *.bak *.accdb
    
    FOR %%f IN (%Folders%) DO (
        ECHO cleaning up %%f
        FOR %%e IN (!%%f!) DO (
            ECHO  move "%%e" "%%f\" 
        )
    )
    

    【讨论】:

    • 感谢一大群人为我挠头很长时间:D
    • 是的,批处理变量有点……好吧。 ...当您超出最基本的用法时不直观:D。
    • (!%%f!) 你能解释一下这部分吗
    • 请阅读答案,我链接到。如果你想深入那个兔子洞,我推荐this thread。但请注意 - 这是很重的东西......
    猜你喜欢
    • 2018-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多