批处理文件 - 目录遍历

时间:2015-05-21 22:09:31

标签: batch-file

我是Windows批处理脚本的新手,这就是我想要做的事情:

我有一个文件夹,里面装有包含各种文件的子文件夹。但是,每个子文件夹都有一个特定的文件(mysecret.txt),我必须找到它并在第三方应用程序上执行导入/导出序列。暂时不要介意导入/导出序列,因为我已经编写了脚本并对其进行了测试。我的问题是如何遍历目录,找到“mysecret.txt”文件并使用第三方应用程序执行操作。

这是我到目前为止所做的:

for /r (C:\Path\to\folder) %%f IN (mysecret.txt) do call :importexport "%%f"
endlocal
goto :eof

:importexport
REM *** SOMETHING LIKE ****
myapplication.exe /import %%f
sleep 10
myapplication.exe /export %%f

:eof
exit

我感到困惑的是importexport部分的具体细节以及如何使用传入的%%f变量?

非常感谢任何帮助。

3 个答案:

答案 0 :(得分:4)

您可以尝试使用此功能,看看它是否适合您

@echo off
for /r "C:\path\to\folder" %%f in (mysecret.txt) do call :importexport "%%f"
endlocal
goto :eof

:importexport
if not exist %1 goto :eof

echo Found %1 with content:
more %1
echo Importing..
myapplication.exe /import %1
echo Sleeping..
timeout /t 10 >nul
echo Exporting..
myapplication.exe /export %1
echo.

它比它需要的更冗长,如果你愿意,只需删除额外的/ echo线。

这是输出:

Found C:\path\to\folder\subfolder1\mysecret.txt with content:
subfolder1 - mysecret.txt
Importing..
myapplication.exe /import C:\path\to\folder\subfolder1\mysecret.txt
Sleeping..
Exporting..
myapplication.exe /export C:\path\to\folder\subfolder1\mysecret.txt
Found C:\path\to\folder\subfolder1\subfolder1a\mysecret.txt with content:
subfolder1a - mysecret.txt
Importing..
myapplication.exe /import C:\path\to\folder\subfolder1\subfolder1a\mysecret.txt
Sleeping..
Exporting..
myapplication.exe /export C:\path\to\folder\subfolder1\subfolder1a\mysecret.txt
Found C:\path\to\folder\subfolder2\mysecret.txt with content:
subfolder2 - mysecret.txt
Importing..
myapplication.exe /import C:\path\to\folder\subfolder2\mysecret.txt
Sleeping..
Exporting..
myapplication.exe /export C:\path\to\folder\subfolder2\mysecret.txt

我在运行时在myapplication.exe前添加了echo,因为我没有该应用程序。

答案 1 :(得分:0)

这里有一些东西:(虽然未经测试。)

contig_len_calculator

脚本将遍历每个子目录,在找到的每个for /r (C:\Path\to\folder) %%f IN (mysecret.txt) do ( myapplication.exe /import %%f ping localhost -n 3>nul myapplication.exe /export %%f ) endlocal pause exit 上执行导入和导出序列。 %% f是myfile.txt。并且ping取代myfile.txt部分。 希望有所帮助!

答案 2 :(得分:0)

@echo off
    setlocal enableextensions disabledelayedexpansion

    for /r "C:\Path\to\folder" %%f IN (mysecret.txt) do if exist "%%~ff" (
        myapplication.exe /import "%%~ff"
        >nul ping -n 11 localhost 
        myapplication.exe /export "%%~ff"
    )
  • for /r中指示的路径作为起始文件夹不使用括号,但引号
  • (set)的{​​{1}}部分中指示字符串时,如果字符串不包含通配符,则指定起点下的所有文件夹(或当前文件夹(如果没有指示初始路径)将枚举,并附加字符串。因此,代码在处理之前测试文件是否存在。
  • 由于for /r不是本机Windows命令,因此我使用sleep替换等效等待。如果您可以使用pingsleep命令,则无需timeout
  • 引用所有文件引用以防止路径中的空格或特殊字符出现问题。