我想创建一个小脚本来解析Mapfiles.zip及其内容之后的目录。 目前我很喜欢多for循环。我想做的就是列出zip内容并获取文件名并插入zip文件旁边的version.txt。 例如
Path = z:\sdfasdf\asdgdfg\njfds\Mapfiles.zip
Content:
2014-01-13 21:06:28 ..... 8821287 1503025 9.10.25.359333.2014_01_13_21_06_28.txt
2014-01-13 21:07:32 ..... 8821287 1503025 9.10.25.359333.2014_01_13_21_07_30.txt
所以最终的目标是z:\ sdfasdf \ asdgdfg \ njfds \ version.txt应该包含'9.10.25.359333'
@echo off
setlocal
FOR /F "tokens=* delims=" %%A in ('dir /b /s z:\sdfasdf\asdgdfg\njfds\*.zip') do (
for /f "delims=" %%a in ('dir /S /b %%A') do ( set path2=%%a
)
set path2=%path2:Mapfiles.zip=''%
for /f "delims=" %%b in ('7z.exe l "%%A" | findstr "iGO" ') do (
set var1=%%b
set var1=%var1:~54,-3%
)
echo.%var1%
)
)
我该怎么做呢?
答案 0 :(得分:1)
您需要使用var > file
打印出echo
结果
或者,在文件末尾加倍add
(whitout replace)。
现在,使用tokens
& delims
您实际上可以“拆分”每一行,并查看您的条件是否与findstr
匹配
例如:
@echo off
for /f "tokens=1,3 delims= " %%g in ('7z.exe l -slt %file%') do (
echo.%%g | findstr /b /c:"Path" 1>nul
if NOT errorlevel 1 (
echo.%%h >> list.txt
)
)
l -slt
告诉7z显示“显示技术信息”tokens=1,3
令牌1和3捕获第一个和第三个delims=
Delims by“space”就是我们将在这里使用的findstr /b
在“g”(第一个标记)的开头(/ b)找到“路径”/c:Path
我们在第一个标记中查找“Path”,因为是如何在7z列表中启动包含文件名的行。errorlevel
找不到字符串时为1,所以...... var >> file.txt
打印到“list.txt”,但只打印文件名(第二个标记)%%h
注意我们为第二个标记设置相关字母,如果以g开头,那么下一个是h 现在,您必须在文件名,空格或任何想要过滤的内容中使用可能的特殊字符。
更多信息:
希望它有所帮助。
答案 1 :(得分:0)
PowerShell还可用于列出zip文件内容的本机解决方案。只需替换示例命令中的Test.zip即可查看其工作原理:
for /f "skip=3 delims=" %A in ('PowerShell -NoProfile -ExecutionPolicy RemoteSigned -Command "$sh = (new-object -com shell.application); $zp = ($sh.NameSpace('"Test.zip"')); $zp.Items() | Select-Object Path"') do @echo %A