Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 从zip文件获取文件名_Batch File_For Loop_7zip - Fatal编程技术网

Batch file 从zip文件获取文件名

Batch file 从zip文件获取文件名,batch-file,for-loop,7zip,Batch File,For Loop,7zip,我想创建一个小脚本来解析Mapfiles.zip及其内容之后的目录。 目前我被多重for循环所束缚。我所要做的就是列出zip内容并获取文件名,然后插入zip文件旁边的version.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\n

我想创建一个小脚本来解析Mapfiles.zip及其内容之后的目录。 目前我被多重for循环所束缚。我所要做的就是列出zip内容并获取文件名,然后插入zip文件旁边的version.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%
)
)

如何才能正确执行此操作?

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

您需要使用
var>文件来打印
echo
结果。
或者,双击文件末尾的
添加
(不带替换)

现在,使用
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
    Token 1和3捕获第一个和第三个
  • delims=
    delims by“space”是我们在这里要使用的
  • findstr/b
    在“g”(第一个令牌)的最开始(/b)处查找“路径”
  • /c:Path
    我们在第一个标记中查找“Path”,因为这是包含7z列表中文件名的行的起始方式
  • 当找不到字符串时,
    errorlevel
    为1,因此
  • var>>file.txt
    打印到“list.txt”,但仅打印文件名(第二个标记)
  • %%h
    注意,我们为第二个令牌设置了一个相关字母,如果以g开头,则下一个是h
现在,您必须在文件名、空格或任何您想要过滤掉的内容中使用posible特殊字符

更多信息:

希望对你有帮助

@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
  )
)