遍历批处理文件中的文件夹和文件?

2023-12-30

这是我的情况。项目的目标是将一些附件迁移到另一个系统。

这些附件将位于父文件夹中,比方说“Folder 0" (see 这个问题的图 https://serverfault.com/questions/147902/windows-command-line-built-in-compression-extraction-tool为了更好地理解),它们将被压缩/压缩。

我希望像这样调用我的批处理脚本:

BatchScript.bat "c:\temp\usd\Folder 0"

我在用着7za.exe作为命令行提取工具。

我希望我的批处理脚本做的是迭代“Folder 0" 的子文件夹,并将所有包含的 ZIP 文件提取到各自的文件夹中。

提取的文件必须与其各自的 ZIP 文件位于同一文件夹中。因此,文件包含在“File 1.zip“ 需要在 ”Folder 1”等等。

我读过有关FOR...DO http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/batch.mspx?mfr=true命令开启Windows XP Professional Product Documentation - Using Batch Files http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/batch.mspx?mfr=true.

这是我的脚本:

@ECHO OFF

FOR /D %folder IN (%%rootFolderCmdLnParam) DO 
    FOR %zippedFile IN (*.zip) DO 7za.exe e %zippedFile

我想我还需要在调用 7za.exe e %zippedFile 进行文件提取之前更改实际目录,但我无法弄清楚这个批处理文件中的操作方式(通过我知道如何在命令行中操作,即使我知道它是相同的指令“cd”)。

EDIT #1

我已经收到了一些提示ServerFault https://serverfault.com/对于同样的问题。请参阅答案这个链接 https://serverfault.com/questions/149317/iterating-through-folders-and-files-in-batch-file.

但是,它是从根目录 (C:) 提取的,而不是从参数文件夹中给定的。

有人有主意吗?

EDIT #2

批处理脚本似乎无法充分处理包含空格字符的文件夹和文件名。谁能证实我的想法吗?

EDIT #3

我需要它是完全递归的,因为我不知道将使用它的目录结构。

编辑#4.a

有了@aphoria的解决方案,我就快到了!唯一的问题是它需要比方说File5.zip,检索文件名仅得到File5, 创建一个子文件夹File5并提取File5.zip to File5子文件夹,然后,它想创建一个File5子文件夹中Folder 1,它应该在哪里创建File1子文件夹,继续我的示例。

编辑#4.b

根据需要,这是当前的代码:

@echo off

setlocal enableextensions enabledelayedexpansion

rem
rem Display instructions when no parameter is given.
rem
if "%1" equ "" (
    echo Syntaxe : od.bat ^<directory mask>^
    echo Exemple : od.bat *
    goto :Eof
)

rem
rem Setting the PATH environment variable for this batch file for accessing 7za.exe.
rem
path=c:\temp;%PATH%

rem
rem Removing quotes from the given command line parameter path.
rem
set root=%1
set root=%root:~%1
set root=%root:~0,-1%

rem Searching directory structure from root for subfolders and zipfiles, then extracting the zipfiles into a subfolder of the same name as the zipfile.
for /F "delims==" %%d in ('dir /ogne /ad /b /s %root%') do (
    echo Traitement du dossier : "%%d"

    for /F "delims==" %%f in ('dir /b "%%d\*.zip"') do (
        rem Getting filename without extension.
        set subfolder=~n%f
        mkdir "%%d\%subfolder%"
        rem Extracting zipfile content to the newly created folder.
        7za.exe e "%%d\%%f" -o"%%d\%subfolder%"
    )
)

:Eof

endlocal

有人有想法吗?

我的猜测是它一次挖掘一个目录层次结构。事情是这样的。考虑我们有一个Folder A in Folder 1(文件夹 1\文件夹 A),然后,它从Folder 1通过Folder 5,然后回到Folder 1\Folder A,其中 %subfolder% 变量保留其最后一个值。

非常感谢任何人的帮助。


我对 7zip 命令行选项不太熟悉,因此您需要找出确切的命令,但下面的脚本将采用完全指定的路径(允许空格)并打印出文件夹名称和 .其中包含 zip 文件。

@ECHO OFF

REM
REM Remove the double quotes from the front and end of the root path
REM
SET ROOT=%1
SET ROOT=%ROOT:~1%
SET ROOT=%ROOT:~0,-1%
ECHO %ROOT%

FOR /F "DELIMS==" %%d in ('DIR "%ROOT%" /AD /B') DO ( 
  ECHO %%d
  FOR /F "DELIMS==" %%f in ('DIR "%ROOT%\%%d\*.zip" /B') DO (
    ECHO   %%f
  )
)  


像这样运行它:

MyScript.CMD "c:\temp\usd\Folder 0"

您应该得到与此类似的输出:

Folder A
  File 1.zip
  File 2.zip
Folder B
  File 1.zip
  File 2.zip  

UPDATE

下面的代码将提取Folder A\File 1.zip到一个新文件夹Folder A\File 1.

需要记住以下几点:

  1. 在第一个FOR循环,你需要有%ROOT%用双引号括起来以处理名称中带有空格的文件夹。
  2. 既然你是SET在第二个内部设置一个变量FOR,你需要把SETLOCAL ENABLEDELAYEDEXPANSION一开始。然后,使用 ! 引用该变量。 (例如,!subfolder!) 在运行时强制扩展。
  3. 你的这行代码set subfolder=~n%f应该是这个set subfolder=%%~nf
  4. I put ECHO在......面前MKDIR and 7za.exe命令进行测试。一旦您确定它正在执行您想要的操作,请删除ECHO陈述。

这是代码:

@ECHO OFF

SETLOCAL ENABLEDELAYEDEXPANSION

REM
REM Remove the double quotes from the front and end of the root path
REM
SET ROOT=%1
SET ROOT=%ROOT:~1%
SET ROOT=%ROOT:~0,-1%
ECHO %ROOT%

REM Searching directory structure from root for subfolders and zipfiles,
REM then extracting the zipfiles into a subfolder of the same name as the zipfile.

FOR /F "delims==" %%d IN ('dir /ogne /ad /b /s "%ROOT%"') DO (
    ECHO Traitement du dossier : "%%d"

    FOR /F "delims==" %%f IN ('dir /b "%%d\*.zip"') DO (
        REM Getting filename without extension.
        SET subfolder=%%~nf
        ECHO mkdir "%%d\!subfolder!"
        REM Extracting zipfile content to the newly created folder.
        ECHO 7za.exe e "%%d\%%f" -o"%%d\!subfolder!"
    )
)

ENDLOCAL
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

遍历批处理文件中的文件夹和文件? 的相关文章

  • 没有权限从任务计划程序写入文件?

    我得到了一个批处理文件 它将运行 C 程序并输出到带有 gt 重定向的文件 该文件将由任务调度程序运行 我发现当从任务计划程序运行批处理文件时 它声称 访问被拒绝 批处理文件运行良好 直到到达 gt 重定向部分 我看到整个批次可以在没有 g
  • regexp_extract适用于多种模式吗?-Spark sql

    模式 1 由 分隔 Input a b c d Output a b c d 当用单个管道分隔时选择所有内容 模式 2 由 分隔和 示例1 Input a b c d Output a b c 选择最后一个双管之前的所有内容 示例2 Inp
  • 从 powershell 脚本调用可执行文件(带参数)

    我正在从 powershell 调用 zip 实用程序 但很难直接获取其参数 这是代码 if not test path C Program Files x86 7 Zip 7z exe throw C Program Files x86
  • 不知道如何一次打印整个日历[关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 cseg segment assume cs cseg ds cseg org 100H begin mov es cs video mov
  • 从MAC地址获取IP。 arp -a 不显示设备

    我正在尝试编写一个批处理文件 该文件应该在连接到网络 腾达 WiFi 路由器 时找到我的 Android 手机的动态分配的 IP 所以我正在尝试arp a并搜索我手机的 MAC 地址 以便我可以从表中获取其 IP C Users Leero
  • 如何在批处理文件的“If”中使用多个条件?

    我可以在批处理文件中使用 或 和 指定多个条件吗if block 如果不是那么复杂 我至少可以使用类似的东西 if value1 lt value lt value2 基本上我的目的是检查当前系统时间是否落在某个时间间隔内 准确地说是上午
  • 根据文件内容重命名文件批处理文件

    我需要一个批处理文件来读取 XYZ txt 文件中存在的描述名称 并根据描述名称重命名该文件名 例如 我有一个名为 nest txt 的文件名 当我们打开文本文件 nest txt 时 文件名的第二行有说明 Description Man
  • 区分大小写的字符串操作

    假设我们有一个变量 例如 set test This is a Test string 我们想要替换每个小写字母t与大写X如此期望的输出 This is a TesX sXring 我尝试使用字符串操作set test test t X 但
  • 批处理文件中的 %* 是什么意思?

    我见过的用法 在批处理文件和命令行中 有人可以解释一下的典型用法吗 有一个例子吗 它的意思是 命令行中的所有参数 例如 当您想要将命令行从批处理文件转发到另一个程序时 它非常有用 REM mybatchfile cmd echo You c
  • 批处理中嵌套 IF ( IF ( ... ) ELSE( .. ) ) 语句

    我正在尝试写一个IF ELSE语句嵌套在另一个语句中IF陈述 这是我所拥有的 IF dirdive 1 IF DEFINED log ECHO DATE TIME gt gt log FOR R root1 G IN DO SET G G
  • 使用javascript批量上传请求到Google Cloud Storage

    我正在尝试使用 javascript 在批量请求中将多个图像上传到谷歌云存储 我在用着https developers google com storage docs json api v1 how tos batch example ht
  • Subversion 中的忽略文件会从 svn:ignore 属性中删除旧值

    我有一个 Subversion 工作副本G csmdepot 构建其中有不同的文件 有些被忽略 有些则没有 我忽略了 Tortoise 的文件 Build 1 wimignored Build 2 wimignored WimID xml
  • 提取“|”之前的字符串[复制]

    这个问题在这里已经有答案了 我有一个数据集 其中一列如下所示 ABC DEF GHI ABCD EFG HIJK ABCDE FGHI JKL DEF GHIJ KLM GHI JKLM NO PQRS BCDE FGHI JKL 等等 我
  • 从 Windows 批处理文件中检测 ANSI 兼容控制台?

    Windows 10 控制台主机 conhost exe has 对 ANSI 转义序列的本机支持 https msdn microsoft com en us library windows desktop mt638032 aspx 旧
  • Windows 批处理文件:如何启用命令的内联回显

    如果在 Windows 批处理文件中默认禁用 echo 是否有办法为特定命令 内联 启用它 我知道可以回显特定命令disabled通过在命令前添加 但是有没有办法做相反的事情呢 例如 假设有一个像这样的批处理文件 echo off cmd1
  • 如何使用 Windows 命令行环境查找和替换文件中的文本?

    我正在使用 Windows 命令行环境编写批处理文件脚本 并希望用另一个文件 例如 BAR 更改文件中某些文本 例如 FOO 的每次出现 最简单的方法是什么 有内置函数吗 这里的很多答案都帮助我指明了正确的方向 但是没有一个适合我 所以我发
  • regex php - 查找 div 中具有特定 ID 的内容

    我确信这是一个简单的问题 尽管我在谷歌上进行了如此多的搜索和搜索 但我似乎无法弄清楚这有什么问题 我在此页面上的其他区域使用类似的表达式来准确返回我想要的内容 但是 我无法让这个特定的位返回我想要的东西 所以也许有人可以帮助我 我有一个带有
  • 任务中的 ConEmu 命令

    我试图在 ConEmu 中获取一个任务来打开多个控制台 并在每个控制台打开时运行一个类似批处理的脚本 例如 打开 Git Bash 将控制台命名为 X 将当前目录设置为 Y 打开另一个 Git Bash 并运行一组命令 例如 cd A B
  • 午夜后时间设置不正确

    我使用以下命令以更易读的格式获取当前日期 时间 set day date 4 2 set mth date 7 2 set yr date 10 4 set hur time 0 2 set min time 3 2 set bdate d
  • 仅当存在较新的文件时才删除文件的 Bat 文件

    我们的备份系统每天都会创建 bak 文件 如果遇到问题 我们可以使用该文件来恢复文件 如果不管这些 它们会填满我们的存储空间 所以我找到了一个批处理文件 我可以在创建新批处理文件后每天运行该文件来删除旧的批处理文件 forfiles p c

随机推荐

  • 如何在 Android 应用程序中运行 shell 脚本?

    我正在尝试为 root 用户编写一个 android 应用程序 该应用程序运行一系列 shell 命令 或者一个 shell 脚本 如果更好的话 并显示输出 任何人都可以指出我正确的方向吗 此代码片段需要 root 访问权限 但会将给定的字
  • Excel VBA 根据单元格值将特定工作表导出为 PDF

    我想使用单元格值Sheet 4选择并导出Sheet 1 Sheet 2 and Sheet 3作为一个 PDF 文件 例如 如果第 4 页A1 1 A2 1 A3 0 则打印Sheet 1 and Sheet 2 但不是Sheet 3 我尝
  • Postgresql 中的奇怪行为

    我是 Postgresql 新手 我正在尝试从 MySQL 迁移我的应用程序 我有一个具有以下结构的表 Table public tbl point Column Type Modifiers Storage Description Tag
  • int** 和 const int** 可以使用别名吗?

    据我了解 这样的事情是可以的 const int ci 42 const int cip ci int ip int cip int j ip 那这个呢 const int ci 42 const int cip ci const int
  • 如何准备 Word 2007 文档以便 C# 可以从语义上提取数据?

    我有一个朋友正在写一篇400页书在 Microsoft Word 2007 中 在整本书中他都200 个故事每个都由许多段落组成 当他写完这本书后 他想将嵌入 Word 文档中的每个故事的文本复制到一个数据库表例如 Title varcha
  • 如何有条件地显示 ASP.NET MVC Razor 中的字段?

    我对 C 和 ASP NET MVC Razor 非常陌生 如果该字段不为空 我想在我的视图中显示该字段 Code tr class hide td class editor label Html LabelFor model gt mod
  • 如何使用mysql全文获取连续单词的频率

    我有一个MyISAM表包含超过 200 万条记录 其中有一个FULLTEXT多列索引 给定一个搜索词 我想知道多少次它出现在每个记录的索引字段中 例如 当搜索 test 在下表中 其中有一个FULLTEXT两者的索引FREETEXT and
  • 显示第一类类型

    我有一个项目列表 每个项目都有一个类 并且该类在整个过程中重复 我只想显示每个类的第一个实例 只用 CSS 就可以实现吗 ul li class red red li li class red red li li class blue bl
  • 读取和解析大型 XML 文件的性能问题

    我有一个目录 其中包含几个大型 XML 文件 总大小约为 10 GB 有没有办法遍历包含 XML 文件的目录并读取 50 字节乘 50 字节并以高性能解析 XML 文件 func mdc Mdc Loadxml path string wg
  • 如何更改 R 中的时间序列(XTS 或 ZOO)?

    我是 stackoverflow 的新手 对 R 也相当陌生 但经过长时间的艰苦搜索 找不到以下问题的答案 我有许多数据文件 它们是温度与时间序列的关系 我将 CSV 作为 ZOO 对象导入 然后转换为 XTS 正确的文件如下所示 其中包含
  • 在 Protractor / E2E 测试中访问 $http 数据 (AngularJS)

    我有一堆进展顺利的单元测试 并且我已经开始将 Protractor E2E 测试添加到我的项目中 我在页面上测试交互元素做得很好 但在测试从浏览器发送的某些数据时遇到问题 例如 我想看看点击某个按钮是否会产生一个POST到某个端点 我使用以
  • 如何删除 BottomBar jetpack compose 中选定的椭圆形项目颜色

    我想删除所选项目后面的蓝色椭圆形颜色 我怎样才能做到这一点 NavigationBarItem selected selected onClick onClick icon if selected selectedIcon else ico
  • 如何使用具有 2 个或更多根的 try_files

    我看了一遍又一遍 发现没有这样的实现 我想知道我正在尝试的是否可能 我有 3 个提供静态内容的相对路径 Path1 usr local www style1 static Path2 usr local www style2 static
  • 视图控制器调用 awakeFromNib 两次

    我面临着这个奇怪的问题 我不确定我哪里出了问题 情况 我有一个 MainWindowController 类 它将加载要显示的正确笔尖 我创建了一个对象并将其更改为 IB 中的 MainWindowController 类 并将其与 Mai
  • 如何在 Keras 中找到错误的预测?

    我构建了一个 Keras 模型 用于从文本输入的原始输入中提取信息 我得到的准确度为 0 9869 我如何知道哪些训练数据导致准确性降低 我已将我正在使用的代码粘贴在下面 import numpy as np from keras mode
  • 如何遍历 json 响应?

    我有这个 json 响应 我正在尝试遍历它以获取天气条件 例如 湿度 和 温度 C 等 我尝试了一些方法但没有成功 data current condition cloudcover 50 humidity 44 observation t
  • 删除指针是否也会删除它所指向的内存?

    如果我有一个像这样的指针 int test new int 我创建了另一个指向的指针test像这样 int test2 test 然后我删除test2 delete test2 这是否意味着它将删除test以及 或者我必须打电话delete
  • 动画完成后所有 UIElement 都变得不可访问

    我正在尝试通过具有每个灯光坐标的 CGRect 数组来实现城市灯光动画 然后围绕这些 CGRect 创建 UIView 这个逻辑 感谢Darren https stackoverflow com users 1077601 darren用于
  • 如何以八度音程抑制命令的输出?

    在 Octave 中 我可以抑制或隐藏在行末尾添加分号的指令的输出 octave 1 gt exp 0 1 ans 1 0000 2 7183 octave 2 gt exp 0 1 octave 3 gt 现在 如果函数显示文本 例如使用
  • 遍历批处理文件中的文件夹和文件?

    这是我的情况 项目的目标是将一些附件迁移到另一个系统 这些附件将位于父文件夹中 比方说 Folder 0 see 这个问题的图 https serverfault com questions 147902 windows command l