Board logo

标题: [文件操作] [已解决]bat命令,如何访问?比如:计算机\Canon DIGITAL IXUS 700\可移动存储 [打印本页]

作者: ygqiang    时间: 2014-6-6 08:43     标题: [已解决]bat命令,如何访问?比如:计算机\Canon DIGITAL IXUS 700\可移动存储

本帖最后由 ygqiang 于 2014-12-17 00:29 编辑

[已解决]bat批处理,无法读写佳能相机路径下的照片和视频。这功能,脚本或编程,能否实现呢?

————————————————————————————精简下基本需求吧。



佳能dc/微单/单反,usb线接win7系统,图片与视频文件,访问路径地址是:
计算机\Canon DIGITAL IXUS 700\可移动存储\DCIM
因为可能会用不同的佳能相机,Canon DIGITAL IXUS 700这个也不是固定的名称。
用bat批处理命令,是无法访问这个地址的。

win系统下面,用鼠标点击开路径,可以访问里面的照片/视频文件。也可以复制出来或者直接删除。说明win系统下面,肯定是可以用脚本或者编程软件来实现吧?
不知道使用脚本或者编程,能否实现这个功能呢?


实现的功能是:
(佳能相机usb数据线接win7系统以后,鼠标点击软件运行,就自动开始搜索/判断。
如果找到DCIM这个目录,并且搜索到里面有照片/视频,就copy到d盘某个目录下并显示copy进度,copy完毕,软件自动退出。
软件运行过程中,最好别弹出运行界面啥的,也不需要鼠标/键盘来控制。但可以显示copy照片/视频过程的界面。)
(这样就不需要每次进入某些比较深/比较偏的目录下,而且每次都要手动复制/粘帖照片和视频文件到本地硬盘上。另外,不喜欢用读卡器+存储卡的方式)

(就是说后台读取相机储存卡里的相片,并保存到电脑的某个磁盘的某个目录里面,并以当时的日期作为文件夹名称保存。
每次相机接电脑以后,手工运行1次软件,就全自动处理完就行。处理过程,尽量避免出现软件界面,避免用鼠标/键盘操作。可以显示copy照片/视频过程的界面。)


首先在d盘根目录下建立1个新目录。目录名字就是:年-月-日,比如:2014-06-27
然后判断是否存在DCIM这个目录?如果存在,就搜索并执行下面操作
a、copy DCIM目录下所有照片和视频文件,到d盘下的新目录(/y参数是指覆盖前不提示)。
b、copy完毕,删除DCIM源目录下的所有照片/视频文件。运行过程中,尽量别弹出交互式菜单/选择项目啥的。
c、DCIM目录下还有别的不同级别的子目录,这些子目录下面才会有照片和视频文件,文件扩展名主要是jpg avi mov mp4 mts

有人说:“设备驱动中有个设备id~这就是能访问的根本
编程访问设备都是通过底层~像api等,dos底层不支持这个当然就不能访问
任何编程语言都能实现这个功能,只要会编程~都简单”
“这个不是磁盘地址   是一个twain接口  要写程序才能操作”
“這個不是基於文件目錄的,而是WIA:編程,調用WIA獲取圖片,包括相機、掃描儀等設備一併解決了。”
“.net framework提供WIA接口,做过.net开发的肯定觉得很简单。”
“应该有com库的,用脚本语言应该也行。”
“这个要找问有powershell 部署经验的windows helpdesk 可能比较熟悉,
能google 到的方法都是通过WIA(Windows Image Acquisition)方式,没有直接用MTP访问的实例:”
“要求编写Powershell的脚本的人要读懂Windows MTP 接口。有开发基础和对Powershell调用COM熟知才行.
通常这样的人都是手机厂家里专门写同步软件的人。”
“查了很多,比如http://blog.csdn.net/fenin/article/details/4237385
在C#中使用WIA获取扫描仪数据(一)
基本上要不就是用.net的语言,或者用com”
http://msdn.microsoft.com/en-us/library/ms630368(VS.85).aspx”

不懂这些,只会一点bat。没有盘符的路径,bat命令是不能访问的。
能否帮忙用脚本或者编程解决?谢谢
作者: Batcher    时间: 2014-6-6 09:36

连上佳能之后,执行这个命令:
net use
结果里面能看到不?
作者: ygqiang    时间: 2014-6-6 09:40

连上佳能之后,执行这个命令:
net use
结果里面能看到不?
Batcher 发表于 2014-6-6 09:36



    这命令是啥意思?

运行了以后,显示:列表是空的。
作者: terse    时间: 2014-6-6 12:52

少个FOR 循环 没测试
  1. @echo off&setlocal enabledelayedexpansion
  2. set "files=%date:~0,4%-%date:~5,2%-%date:~8,2%"
  3. set "ext=*.jpg *.mov *.avi *.mp4 *.mts"
  4. md "d:\%files%" 2>nul
  5. for %%a in (e f g h i j k l m n o p q r s t) do (
  6.     if exist "%%a:\DCIM\" (
  7.        cd /d "%%a:\DCIM\"
  8.        for /f "delims=" %%b in ('dir /b /s /a-d %ext%') do (
  9.            copy /y "%%b" "d:\%files%"
  10.        )
  11.        del /q /s %ext%
  12.     )
  13. )
  14. pause
复制代码

作者: ygqiang    时间: 2014-6-6 13:00

少个FOR 循环 没测试
terse 发表于 2014-6-6 12:52



    这个测试过了。访问不了。。

佳能dc/微单/单反,usb线接win系统,图片与视频文件,访问路径地址是:
计算机\Canon DIGITAL IXUS 700\可移动存储\DCIM
作者: ygqiang    时间: 2014-6-6 14:48     标题: bat批处理,无法读写佳能相机目录下的照片和视频。这功能,脚本或编程,能否实现呢?

bat批处理,无法读写佳能相机目录下的照片和视频。这功能,脚本或编程,能否实现呢?

--------------------------1、佳能dc/微单/单反,usb线接win系统,图片与视频文件,访问路径地址是:
计算机\Canon DIGITAL IXUS 700\可移动存储\DCIM
用bat批处理命令,是无法访问这个地址的。

--------------------------2、如果是索尼/松下等相机,usb线接win系统,图片与视频文件,访问路径地址是带某个盘符的。
比如:E:\DCIM\101MSDCF,E:\PRIVATE\AVCHD\BDMV\STREAM
这样可以用下面的bat批处理命令实现:

md "d:\%date:~0,4%-%date:~5,2%-%date:~8,2%"
for %%a in (e f g h i j k l m n o p q r s t) do (
    if exist "%%a:\DCIM" (
        for %%b in (jpg mov avi mp4 mts) do (
            for /f %%i in ('dir /b /s /a-d %%a:\*.%%b') do (
                copy /y "%%~fi" "d:\%date:~0,4%-%date:~5,2%-%date:~8,2%"
                del /q "%%~fi"
            )
        )
    )
)
exit


脚本或者编程,能否同时实现上面2种情况下的功能呢?

实现的功能是:首先在d盘根目录下建立1个新目录。目录名字就是:年-月-日,比如:2014-06-27
然后判断是否存在DCIM这个目录?如果存在,就执行下面操作
a、copy DCIM目录下所有照片和视频文件,到d盘下的新目录(/y参数是指覆盖前不提示)。
b、copy完毕,删除源目录下的所有照片/视频文件。运行过程中,尽量别弹出交互式菜单/选择项目啥的。
c、DCIM目录下还有别的不同级别的子目录,这些子目录下面才会有照片和视频文件,文件扩展名主要是jpg  avi  mov  mp4  mts


其实要求很简单。usb线接电脑以后,运行这个小软件,就全自动识别出来照片/视频,并且自动copy到d盘某个目录下。

win系统下面,用鼠标点击开路径,可以访问里面的照片/视频文件。也可以复制出来。说明win系统下面,肯定是可以用脚本或者编程软件来实现吧?
有人说:“设备驱动中有个设备id~这就是能访问的根本
编程访问设备都是通过底层~像api等,dos底层不支持这个当然就不能访问
任何编程语言都能实现这个功能,只要会编程~都简单”
作者: terse    时间: 2014-6-6 15:49

回复 5# ygqiang
你换这个访问地址试过吗? “计算机\Canon DIGITAL IXUS 700\可移动存储\DCIM”
作者: ygqiang    时间: 2014-6-6 16:35

回复  ygqiang
你换这个访问地址试过吗? “计算机\Canon DIGITAL IXUS 700\可移动存储\DCIM”
terse 发表于 2014-6-6 15:49



   
试过。不行的。
作者: ygqiang    时间: 2014-6-7 07:36

顶下。。。。。。。。。
作者: chenyulzhh    时间: 2014-6-7 15:12

也mark下,等待大牛给出解决方案。。
作者: ygqiang    时间: 2014-6-7 20:09

???????????????
作者: ygqiang    时间: 2014-12-17 00:28

通过powershell脚本,解决了。
  1. reg add "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /f /v "HideFileExt" /t REG_DWORD /d 0
  2. ;显示文件扩展名
  3. ping 127.0.0.1 -n 2 >nul 2>nul
  4. ——————————————————————————————————————————————————————————————————————————————
  5. if exist "%userprofile%\Desktop" goto :w7-pshell
  6. if exist "%userprofile%\桌面" goto :xp-pshell
  7. exit
  8. ————————————————————————————————————————————————
  9. :w7-pshell
  10. echo win7-pshell
  11. if exist "c:\pshell" rd /s /q "c:\pshell"
  12. md "c:\pshell"
  13. ———————————————————————
  14. md "d:\%date:~0,4%-%date:~5,2%"
  15. explorer "d:\%date:~0,4%-%date:~5,2%"
  16. for %%a in (e f g h i j k l m n o p q r s t) do (
  17.     if exist "%%a:\DCIM" (
  18. echo %%a:\DCIM
  19. pause
  20.         for %%b in (jpg arw crw cr2 nef rw2 orf raf dng x3f avi mov mp4 mts) do (
  21.             for /f %%i in ('dir /b /s /a-d %%a:\DCIM\*.%%b') do (
  22.                 copy /y "%%~fi" "d:\%date:~0,4%-%date:~5,2%"
  23.                 del /q "%%~fi"
  24.             )
  25.         )
  26.         for %%b in (mp4 mts) do (
  27.             for /f %%i in ('dir /b /s /a-d %%a:\*.%%b') do (
  28.                 copy /y "%%~fi" "d:\%date:~0,4%-%date:~5,2%"
  29.                 del /q "%%~fi"
  30.             )
  31.         )
  32.     )
  33. )
  34. ———————————————————————
  35. echo # >>"c:\pshell\00-copy.ps1"
  36. echo # 获取 Shell.Application 代理 >>"c:\pshell\00-copy.ps1"
  37. echo #  >>"c:\pshell\00-copy.ps1"
  38. echo function Get-ShellProxy>>"c:\pshell\00-copy.ps1"
  39. echo { >>"c:\pshell\00-copy.ps1"
  40. echo   if( -not $global:ShellProxy) {  >>"c:\pshell\00-copy.ps1"
  41. echo   $global:ShellProxy = new-object -com Shell.Application >>"c:\pshell\00-copy.ps1"
  42. echo   }>>"c:\pshell\00-copy.ps1"
  43. echo   $global:ShellProxy>>"c:\pshell\00-copy.ps1"
  44. echo } >>"c:\pshell\00-copy.ps1"
  45. echo # >>"c:\pshell\00-copy.ps1"
  46. echo # 查看 Shell 项>>"c:\pshell\00-copy.ps1"
  47. echo #  >>"c:\pshell\00-copy.ps1"
  48. echo function Get-ShellItem>>"c:\pshell\00-copy.ps1"
  49. echo { >>"c:\pshell\00-copy.ps1"
  50. echo  param($Path=17) >>"c:\pshell\00-copy.ps1"
  51. echo  $shell=Get-ShellProxy>>"c:\pshell\00-copy.ps1"
  52. echo  # 默认的 NameSpace()方法只支持目录,不支持文件 >>"c:\pshell\00-copy.ps1"
  53. echo  # 为了增强兼容性和保持一致性,如果传入一个文件路径,可以尝试通过文件路径获取目录,然后再从目录的子项中获取Shell项 >>"c:\pshell\00-copy.ps1"
  54. echo  trap [System.Management.Automation.MethodInvocationException]>>"c:\pshell\00-copy.ps1"
  55. echo  { >>"c:\pshell\00-copy.ps1"
  56. echo   $Path = $Path.ToString() >>"c:\pshell\00-copy.ps1"
  57. echo   $dir = $Path.Substring( 0 ,$Path.LastIndexOf('\') ) >>"c:\pshell\00-copy.ps1"
  58. echo   return $shell.NameSpace($dir).items()  ^|  >>"c:\pshell\00-copy.ps1"
  59. echo    where { (-not $_.IsFolder ) -and  $_.path -eq $Path} ^|>>"c:\pshell\00-copy.ps1"
  60. echo    select -First ^1>>"c:\pshell\00-copy.ps1"
  61. echo   continue>>"c:\pshell\00-copy.ps1"
  62. echo  } >>"c:\pshell\00-copy.ps1"
  63. echo  $shell.NameSpace($Path).self >>"c:\pshell\00-copy.ps1"
  64. echo } >>"c:\pshell\00-copy.ps1"
  65.   
  66. echo # >>"c:\pshell\00-copy.ps1"
  67. echo # 查看 Shell 子项,支持递归和过滤>>"c:\pshell\00-copy.ps1"
  68. echo #  >>"c:\pshell\00-copy.ps1"
  69. echo function Get-ChildShellItem>>"c:\pshell\00-copy.ps1"
  70. echo { >>"c:\pshell\00-copy.ps1"
  71. echo  param(>>"c:\pshell\00-copy.ps1"
  72. echo   $Path=17,>>"c:\pshell\00-copy.ps1"
  73. echo   [switch]$Recurse,>>"c:\pshell\00-copy.ps1"
  74. echo   $Filter=$null) >>"c:\pshell\00-copy.ps1"
  75. echo  #内部过滤器>>"c:\pshell\00-copy.ps1"
  76. echo  Filter myFilter>>"c:\pshell\00-copy.ps1"
  77. echo  {>>"c:\pshell\00-copy.ps1"
  78. echo    if($Filter){>>"c:\pshell\00-copy.ps1"
  79. echo    $_ ^| where { $_.Name -match $Filter } >>"c:\pshell\00-copy.ps1"
  80. echo    }>>"c:\pshell\00-copy.ps1"
  81. echo    else{>>"c:\pshell\00-copy.ps1"
  82. echo    $_>>"c:\pshell\00-copy.ps1"
  83. echo    }>>"c:\pshell\00-copy.ps1"
  84. echo  }>>"c:\pshell\00-copy.ps1"
  85. echo  $shellItem = Get-ShellItem $Path>>"c:\pshell\00-copy.ps1"
  86. echo  $shellItem ^| myFilter>>"c:\pshell\00-copy.ps1"
  87. echo  # 如果是目录 >>"c:\pshell\00-copy.ps1"
  88. echo  if( $shellItem.IsFolder ){>>"c:\pshell\00-copy.ps1"  
  89. echo   # 如果指定递归 >>"c:\pshell\00-copy.ps1"
  90. echo   if($Recurse) { >>"c:\pshell\00-copy.ps1"
  91. echo    $shellItem ^| myFilter>>"c:\pshell\00-copy.ps1"
  92. echo    $stack=New-Object System.Collections.Stack>>"c:\pshell\00-copy.ps1"
  93. echo    # 当前目录压入堆栈 >>"c:\pshell\00-copy.ps1"
  94. echo    $stack.Push($shellItem)>>"c:\pshell\00-copy.ps1"
  95. echo    while($stack.Count -gt 0)>>"c:\pshell\00-copy.ps1"
  96. echo    {>>"c:\pshell\00-copy.ps1"
  97. echo      # 访问栈顶元素>>"c:\pshell\00-copy.ps1"
  98. echo      $top = $stack.Pop()>>"c:\pshell\00-copy.ps1"
  99. echo      $top ^| myFilter>>"c:\pshell\00-copy.ps1"
  100. echo      # 访问栈顶元素的子元素>>"c:\pshell\00-copy.ps1"
  101. echo      $top.GetFolder.items() ^| foreach {>>"c:\pshell\00-copy.ps1"
  102. echo        if( $_.IsFolder )>>"c:\pshell\00-copy.ps1"
  103. echo        { $stack.Push($_) }>>"c:\pshell\00-copy.ps1"
  104. echo        else { $_ ^| myFilter }>>"c:\pshell\00-copy.ps1"
  105. echo      }>>"c:\pshell\00-copy.ps1"
  106. echo    }>>"c:\pshell\00-copy.ps1"
  107. echo   } >>"c:\pshell\00-copy.ps1"
  108. echo   else{ >>"c:\pshell\00-copy.ps1"
  109. echo   $shellItem.GetFolder.items() ^| myFilter }>>"c:\pshell\00-copy.ps1"
  110. echo   } >>"c:\pshell\00-copy.ps1"
  111. echo } >>"c:\pshell\00-copy.ps1"
  112. echo # >>"c:\pshell\00-copy.ps1"
  113. echo # 复制Shell项>>"c:\pshell\00-copy.ps1"
  114. echo # >>"c:\pshell\00-copy.ps1"
  115. echo function Copy-ShellItem>>"c:\pshell\00-copy.ps1"
  116. echo {>>"c:\pshell\00-copy.ps1"
  117. echo  param($Path,$Destination)>>"c:\pshell\00-copy.ps1"
  118. echo  $shell=Get-ShellProxy>>"c:\pshell\00-copy.ps1"
  119. echo  $shell.NameSpace($Destination).Copyhere($Path,4)>>"c:\pshell\00-copy.ps1"
  120. echo }>>"c:\pshell\00-copy.ps1"
  121. echo # >>"c:\pshell\00-copy.ps1"
  122. echo # 删除Shell项>>"c:\pshell\00-copy.ps1"
  123. echo # >>"c:\pshell\00-copy.ps1"
  124. echo function Remove-ShellItem>>"c:\pshell\00-copy.ps1"
  125. echo {>>"c:\pshell\00-copy.ps1"
  126. echo  param($Path)>>"c:\pshell\00-copy.ps1"
  127. echo  $ShellItem = Get-ShellItem $Path>>"c:\pshell\00-copy.ps1"
  128. echo  $ShellItem.InvokeVerb('delete')>>"c:\pshell\00-copy.ps1"
  129. echo }>>"c:\pshell\00-copy.ps1"
  130. echo # >>"c:\pshell\00-copy.ps1"
  131. echo # 移动Shell项>>"c:\pshell\00-copy.ps1"
  132. echo # >>"c:\pshell\00-copy.ps1"
  133. echo function Move-ShellItem>>"c:\pshell\00-copy.ps1"
  134. echo {>>"c:\pshell\00-copy.ps1"
  135. echo  param($Path,$Destination)>>"c:\pshell\00-copy.ps1"
  136. echo  $shell=Get-ShellProxy>>"c:\pshell\00-copy.ps1"
  137. echo  $shell.NameSpace($Destination).MoveHere($Path,16)>>"c:\pshell\00-copy.ps1"
  138. echo }>>"c:\pshell\00-copy.ps1"
  139. echo # 文件存放的地址>>"c:\pshell\00-copy.ps1"
  140. echo $des = 'D:\'>>"c:\pshell\00-copy.ps1"
  141. echo # 匹配相机的关键字,比如:canon,nokia,Windows Phone>>"c:\pshell\00-copy.ps1"
  142. echo $keywords = 'canon','nokia','Windows Phone'>>"c:\pshell\00-copy.ps1"
  143. echo foreach ($keyword in $keywords)>>"c:\pshell\00-copy.ps1"
  144. echo {>>"c:\pshell\00-copy.ps1"
  145. echo $phones = Get-ChildShellItem ^| where { $_.name -like "*$keyword*" }>>"c:\pshell\00-copy.ps1"
  146. echo foreach ($phone in $phones)>>"c:\pshell\00-copy.ps1"
  147. echo {>>"c:\pshell\00-copy.ps1"
  148. echo if($phone -eq $null)>>"c:\pshell\00-copy.ps1"
  149. echo {>>"c:\pshell\00-copy.ps1"
  150. echo break>>"c:\pshell\00-copy.ps1"
  151. echo }>>"c:\pshell\00-copy.ps1"
  152. echo Get-ChildShellItem -Path "$($phone.Path)" -Recurse -Filter '((.jpg)^|(.crw)^|(.cr2)^|(.avi)^|(.mov)^|(.mp4))$' ^| foreach {>>"c:\pshell\00-copy.ps1"
  153. echo #获取照片创建日期>>"c:\pshell\00-copy.ps1"
  154. echo $datestr = $_.Parent.GetDetailsOf($_,3)>>"c:\pshell\00-copy.ps1"
  155. echo $datestr=(get-date).tostring("yyyy-MM")>>"c:\pshell\00-copy.ps1"
  156. echo #新建日期文件夹>>"c:\pshell\00-copy.ps1"
  157. echo $dir = Join-Path $des $datestr>>"c:\pshell\00-copy.ps1"
  158. echo if( -not (Test-Path $dir) ) {>>"c:\pshell\00-copy.ps1"
  159. echo mkdir $dir>>"c:\pshell\00-copy.ps1"
  160. echo }>>"c:\pshell\00-copy.ps1"
  161. echo # 如果文件存在,先删掉>>"c:\pshell\00-copy.ps1"
  162. echo $file="{0}\{1}" -f $dir,$_.name>>"c:\pshell\00-copy.ps1"
  163. echo if( test-path $file) {  remove-item $file }>>"c:\pshell\00-copy.ps1"
  164. echo # 复制文件>>"c:\pshell\00-copy.ps1"
  165. echo Copy-ShellItem -Path $_ -Destination $dir>>"c:\pshell\00-copy.ps1"
  166. echo # 移动文件>>"c:\pshell\00-copy.ps1"
  167. echo # move-ShellItem -Path $_ -Destination $dir>>"c:\pshell\00-copy.ps1"
  168. echo }>>"c:\pshell\00-copy.ps1"
  169. echo }>>"c:\pshell\00-copy.ps1"
  170. echo }>>"c:\pshell\00-copy.ps1"
  171. echo exit>>"c:\pshell\00-copy.ps1"
  172. echo $des =  [environment]::GetFolderPath([System.Environment+SpecialFolder]::MyPictures)>>"c:\pshell\00-copy.ps1"
  173. ping 127.0.0.1 -n 3 >nul 2>nul
  174. ———————————————————————
  175. ftype Microsoft.Powershellscript.1="c:\system32\windowspowershell\v1.0\powershell.exe" "%%1"
  176. ping 127.0.0.1 -n 2 >nul 2>nul
  177. echo powershell>>c:\pshell\00-copy.bat
  178. echo WSH.Sleep 2000>>"c:\pshell\00-copy.vbs
  179. echo set ws=wscript.createobject("wscript.shell")>>c:\pshell\00-copy.vbs
  180. echo ws.sendkeys "Set-ExecutionPolicy Unrestricted -force{Enter}">>c:\pshell\00-copy.vbs
  181. echo ws.sendkeys "exit{Enter}">>c:\pshell\00-copy.vbs
  182. echo ws.sendkeys "exit{Enter}">>c:\pshell\00-copy.vbs
  183. start c:\pshell\00-copy.bat
  184. ping 127.0.0.1 -n 5 >nul 2>nul
  185. start c:\pshell\00-copy.vbs
  186. ping 127.0.0.1 -n 4 >nul 2>nul
  187. powershell -file "c:\pshell\00-copy.ps1"
  188. explorer "d:\%date:~0,4%-%date:~5,2%"
  189. exit
  190. ————————————————————————————————————————————————
  191. :xp-pshell
  192. exit
复制代码





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