[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
回复 11# ivor


    你的这个py代码。bat批处理也能实现。
  1. echo 搜索某个目录下所有的jpg文件,并复制到目标目录
  2. setlocal enabledelayedexpansion&for /f "delims=" %%a in ('dir /s /b C:\000\*.jpg') do (copy "%%a" "D:\test")
复制代码

TOP

回复 16# ygqiang


    我搜了一下,访问相机好像很麻烦
#&cls&@powershell "Invoke-Expression ([Io.File]::ReadAllText('%~0',[Text.Encoding]::UTF8))" &pause&exit

TOP

回复 17# ivor


相机/手机,通过usb数据线连接到win7系统,不显示U盘那种盘符。
    访问/读取这种设备,应该有统一的解决方案吧?

TOP

初步解决了。索引文件需要些时间 等待一会的话 文件就全了。
  1. #
  2. # 获取 Shell.Application 代理
  3. #  
  4. function Get-ShellProxy
  5. {
  6.   if( -not $global:ShellProxy) {  
  7.   $global:ShellProxy = new-object -com Shell.Application
  8.   }
  9.   $global:ShellProxy
  10. }
  11. #
  12. # 查看 Shell 项
  13. #  
  14. function Get-ShellItem
  15. {
  16. param($Path=17)
  17. $shell=Get-ShellProxy
  18. # 默认的 NameSpace()方法只支持目录,不支持文件
  19. # 为了增强兼容性和保持一致性,如果传入一个文件路径,可以尝试通过文件路径获取目录,然后再从目录的子项中获取Shell项
  20. trap [System.Management.Automation.MethodInvocationException]
  21. {
  22.   $Path = $Path.ToString()
  23.   $dir = $Path.Substring( 0 ,$Path.LastIndexOf('\') )
  24.   return $shell.NameSpace($dir).items()  |  
  25.    where { (-not $_.IsFolder ) -and  $_.path -eq $Path} |
  26.    select -First 1
  27.   continue
  28. }
  29. $shell.NameSpace($Path).self
  30. }
  31. #
  32. # 查看 Shell 子项,支持递归和过滤
  33. #  
  34. function Get-ChildShellItem
  35. {
  36. param(
  37.   $Path=17,
  38.   [switch]$Recurse,
  39.   $Filter=$null)
  40. #内部过滤器
  41. Filter myFilter
  42. {
  43.    if($Filter){
  44.    $_ | where { $_.Name -match $Filter }
  45.    }
  46.    else{
  47.    $_
  48.    }
  49. }
  50. $shellItem = Get-ShellItem $Path
  51. $shellItem | myFilter
  52. # 如果是目录
  53. if( $shellItem.IsFolder ){  
  54.   # 如果指定递归
  55.   if($Recurse) {
  56.    $shellItem | myFilter
  57.    $stack=New-Object System.Collections.Stack
  58.    # 当前目录压入堆栈
  59.    $stack.Push($shellItem)
  60.    while($stack.Count -gt 0)
  61.    {
  62.      # 访问栈顶元素
  63.      $top = $stack.Pop()
  64.      $top | myFilter
  65.      # 访问栈顶元素的子元素
  66.      $top.GetFolder.items() | foreach {
  67.        if( $_.IsFolder )
  68.        { $stack.Push($_) }
  69.        else { $_ | myFilter }
  70.      }
  71.    }
  72.   }
  73.   else{
  74.   $shellItem.GetFolder.items() | myFilter }
  75.   }
  76. }
  77. #
  78. # 复制Shell项
  79. #
  80. function Copy-ShellItem
  81. {
  82. param($Path,$Destination)
  83. $shell=Get-ShellProxy
  84. $shell.NameSpace($Destination).Copyhere($Path,4)
  85. }
  86. #
  87. # 删除Shell项
  88. #
  89. function Remove-ShellItem
  90. {
  91. param($Path)
  92. $ShellItem = Get-ShellItem $Path
  93. $ShellItem.InvokeVerb('delete')
  94. }
  95. #
  96. # 移动Shell项
  97. #
  98. function Move-ShellItem
  99. {
  100. param($Path,$Destination)
  101. $shell=Get-ShellProxy
  102. $shell.NameSpace($Destination).MoveHere($Path,16)
  103. }
  104. # 文件存放的地址
  105. $des = 'd:\'
  106. # 匹配相机的关键字,比如:canon,nokia,Windows Phone,meizu,Smartisan,ZUK Z1
  107. $keywords = 'canon','meizu','Windows Phone','nokia','Smartisan','ZUK Z1'
  108. foreach ($keyword in $keywords)
  109. {
  110. $phones = Get-ChildShellItem | where { $_.name -like "*$keyword*" }
  111. foreach ($phone in $phones)
  112. {
  113. if($phone -eq $null)
  114. {
  115. break
  116. }
  117. 1..3|%{Get-ChildShellItem -Path "$($phone.Path)" -Recurse -Filter '((.jpg)|(.crw)|(.cr2)|(.avi)|(.mov)|(.mp4))$'
  118. sleep 3}
  119. Get-ChildShellItem -Path "$($phone.Path)" -Recurse -Filter '((.jpg)|(.crw)|(.cr2)|(.avi)|(.mov)|(.mp4))$'| foreach {
  120. #获取照片创建日期
  121. $datestr = $_.Parent.GetDetailsOf($_,3)
  122. $datestr=(get-date).tostring("yyyy-MM")
  123. #新建日期文件夹
  124. $dir = Join-Path $des $datestr
  125. if( -not (Test-Path $dir) ) {
  126. mkdir $dir
  127. }
  128. # 如果文件存在,先删掉
  129. $file="{0}\{1}" -f $dir,$_.name
  130. if( test-path $file) {  remove-item $file }
  131. # 复制文件
  132. Copy-ShellItem -Path $_ -Destination $dir
  133. # 移动文件
  134. # move-ShellItem -Path $_ -Destination $dir
  135. }
  136. }
  137. }
  138. exit
  139. $des =  [environment]::GetFolderPath([System.Environment+SpecialFolder]::MyPictures)
复制代码

TOP

返回列表