繁体   English   中英

批处理文件/ Powershell-枚举文件夹中的文件

[英]Batch File/Powershell - enumerating files in a folder

注意:不必每句话都使用批处理,但我只是熟悉批处理,我想Powershell会更好,因此,如果在Powershell中有解决此问题的简便方法,请大喊大叫!

我的艰巨任务是为所有客户端测试灾难恢复备份,即安装ShadowProtect Snapshots最新增量文件,写入和读取文件,然后卸载映像。 批处理的实际ShadowProtect部分相当简单,但我想设计一个可以自动执行此操作的批处理。

本质上我的问题是:

我如何首先在批处理文件中枚举文件夹中的文件,然后将给定文件名的特定部分放入变量中?

之所以成为ShadowProtect增量产品,是因为其命名约定如下:

SERVERNAME_DRIVELETTER_b00X_i000x           - whereby b = base image, i = incremental number

我需要挂载最新的增量映像,因此需要基于文件名中i后面的数字来分析文件夹并查找最新的增量映像。

可以批量吗?

谢谢!

这样的事情应该起作用:

@echo off

setlocal EnableDelayedExpansion

for /f "delims=_ tokens=1-4" %%f in ('dir /b *_*_*_*') do (
  set servername=%%f
  set driveletter=%%g
  set base_image=%%h
  set increment=%%i
)

echo !servername!
echo !driveletter!
echo !base_image!
echo !increment!

endlocal

如果您有多个匹配文件,并且想对所有文件进行处理,则需要将处理代码放入循环中。

编辑:

  • for /f :处理文件或单引号引起的命令输出
  • delims=_ :已处理内容中的字段用下划线分隔
  • tokens=1-4 :将前四个令牌分配给参数%%f%%i (第一个参数是for语句中给定的参数)
  • dir /b *_*_*_* :列出名称至少包含3个下划线的所有文件及其文件名(此命令的输出由for循环处理)
  • setlocal EnableDelayedExpansion :在运行时扩展变量(否则将参数分配给变量将不起作用)

有关更多详细信息,请参见help forhelp dir

您可以始终使用vbscript或jscript。 它比批处理文件功能强大得多。 在没有Powershell的机器上也可以使用jscript和vbscript主机!

枚举链接: http : //www.techimo.com/forum/webmastering-programming/100453-recursive-javascript-list-all-files-folders-given-folder.html

Jscript字符串参考: http : //msdn.microsoft.com/zh-cn/library/bxsyt3yc( v=vs.80) .aspx

您应该能够将两者结合起来。

您运行自己的jscript(由于与JavaScript类似,我更喜欢jscript而不是vbscript)

cscript脚本名称

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM