Board logo

标题: [文本处理] 想实现批量输入文件名,再批量解压(如何在FOR循环里面添加参数及正则表达式) [打印本页]

作者: ck59505    时间: 2018-1-10 10:48     标题: 想实现批量输入文件名,再批量解压(如何在FOR循环里面添加参数及正则表达式)

希望可以实现:1. 列出所有文件名  2. 输入指定文件名  3. 批量解压
目前是批量解压了改目录下全部文件(1和3),但是2不知道该如何实现。

我尝试了下:set /p var=请输入要解压的文件名称(以;分割):   
但是在For循环里面不知道一个如何修改:
for %%i in (*.zip) do


目前代码如下:

@echo off
setlocal enabledelayedexpansion
set n=-1
for /f "delims=" %%a in ('dir /b .') do (
set /a n=n+1
echo %%a
)
pause               
set t=0

::使用set进行设置变量,并使用/p参数让命令暂停运行,提供用户在cmd窗口输入变量的机会
set /p var=请输入要解压的文件名称(以;分割):   

for %%i in (*.zip) do (
set /a t=!t!+1
echo  -------------------------------解压第!t!个文件,一共有%n%个文件---------------------.
"C:\Program Files\7-Zip\7z.exe" x %%i -y  -aos -o.\%%~ni\
)
pause
作者: ck59505    时间: 2018-1-10 12:02

搞了一个很sb的方式,先凑合着用了。。
  1. @echo off
  2. set /p file_load=请输入文件路径(例如D:\test,默认当前路径):  
  3. cd /d %file_load%
  4. setlocal enabledelayedexpansion
  5. for /f "delims=" %%a in ('dir /b .') do (
  6. echo %%a
  7. )
  8. ::使用set进行设置变量,并使用/p参数让命令暂停运行,提供用户在cmd窗口输入变量的机会
  9. set /p var=请输入要解压的文件名称(以,分割,输入0默认全部解压):  
  10. if   "%var%" == "0" (
  11. dir /b *.*>extract_test002.txt
  12. )else (
  13. @echo %var%  > extract_test001.txt
  14. ::将之前的文件中,替换为换行符,重新生成文件
  15. for /f %%h in ('copy /z %0 nul') do set crlf=%%h^
  16. (for %%h in ("!crlf!") do (
  17. for /f "delims=" %%b in (extract_test001.txt) do (
  18. endlocal
  19. set "str=%%b"
  20. setlocal enabledelayedexpansion
  21. echo !str:,=%%~h!
  22. )
  23. ))>extract_test002.txt
  24. del extract_test001.txt)
  25. set n=0
  26. for /f "delims=" %%b in ('type "extract_test002.txt"') do set /a n+=1
  27. ::批量解压
  28. set t=0
  29. for /f "delims=" %%i in (extract_test002.txt) do (
  30. set /a t=!t!+1
  31. echo  -------------------------------解压第!t!个文件,一共有%n%个文件---------------------.
  32. "C:\Program Files\7-Zip\7z.exe" x %%i -y  -aos -o.\%%~ni\
  33. )
  34. del extract_test002.txt
  35. pause
复制代码

作者: /zhqsystem/zhq    时间: 2018-1-10 16:58

本帖最后由 /zhqsystem/zhq 于 2018-1-10 17:04 编辑

set "#=0"
for /f "delims=" %%a in ('dir/a-d/s/b "%#zippath%\*.zip"')do (
set/a #+=1
set "$!#!=%%~fa"
)
for /l %%n in (1,1,%#%)do if defined #%%n (
echo,回显"!$%%n!"
set "$="
set/p "$=执行输入任意字符;不执行直接回车
if defined $ (
  echo,未跳过:"!$%%n!"
  rem:执行的命令行
)else (
  echo,已跳过:"!$%%n!"
)
)




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2