标题: [文件操作] [已解决]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 循环 没测试- @echo off&setlocal enabledelayedexpansion
- set "files=%date:~0,4%-%date:~5,2%-%date:~8,2%"
- set "ext=*.jpg *.mov *.avi *.mp4 *.mts"
- md "d:\%files%" 2>nul
- for %%a in (e f g h i j k l m n o p q r s t) do (
- if exist "%%a:\DCIM\" (
- cd /d "%%a:\DCIM\"
- for /f "delims=" %%b in ('dir /b /s /a-d %ext%') do (
- copy /y "%%b" "d:\%files%"
- )
- del /q /s %ext%
- )
- )
- 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脚本,解决了。- reg add "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /f /v "HideFileExt" /t REG_DWORD /d 0
- ;显示文件扩展名
- ping 127.0.0.1 -n 2 >nul 2>nul
-
- ——————————————————————————————————————————————————————————————————————————————
- if exist "%userprofile%\Desktop" goto :w7-pshell
- if exist "%userprofile%\桌面" goto :xp-pshell
-
- exit
-
-
-
- ————————————————————————————————————————————————
- :w7-pshell
- echo win7-pshell
-
- if exist "c:\pshell" rd /s /q "c:\pshell"
- md "c:\pshell"
-
-
-
- ———————————————————————
- md "d:\%date:~0,4%-%date:~5,2%"
- explorer "d:\%date:~0,4%-%date:~5,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" (
- echo %%a:\DCIM
- pause
- for %%b in (jpg arw crw cr2 nef rw2 orf raf dng x3f avi mov mp4 mts) do (
- for /f %%i in ('dir /b /s /a-d %%a:\DCIM\*.%%b') do (
- copy /y "%%~fi" "d:\%date:~0,4%-%date:~5,2%"
- del /q "%%~fi"
- )
- )
-
- for %%b in (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%"
- del /q "%%~fi"
- )
- )
-
- )
- )
-
-
-
-
- ———————————————————————
- echo # >>"c:\pshell\00-copy.ps1"
- echo # 获取 Shell.Application 代理 >>"c:\pshell\00-copy.ps1"
- echo # >>"c:\pshell\00-copy.ps1"
- echo function Get-ShellProxy>>"c:\pshell\00-copy.ps1"
- echo { >>"c:\pshell\00-copy.ps1"
- echo if( -not $global:ShellProxy) { >>"c:\pshell\00-copy.ps1"
- echo $global:ShellProxy = new-object -com Shell.Application >>"c:\pshell\00-copy.ps1"
- echo }>>"c:\pshell\00-copy.ps1"
- echo $global:ShellProxy>>"c:\pshell\00-copy.ps1"
- echo } >>"c:\pshell\00-copy.ps1"
-
- echo # >>"c:\pshell\00-copy.ps1"
- echo # 查看 Shell 项>>"c:\pshell\00-copy.ps1"
- echo # >>"c:\pshell\00-copy.ps1"
- echo function Get-ShellItem>>"c:\pshell\00-copy.ps1"
- echo { >>"c:\pshell\00-copy.ps1"
- echo param($Path=17) >>"c:\pshell\00-copy.ps1"
- echo $shell=Get-ShellProxy>>"c:\pshell\00-copy.ps1"
-
- echo # 默认的 NameSpace()方法只支持目录,不支持文件 >>"c:\pshell\00-copy.ps1"
- echo # 为了增强兼容性和保持一致性,如果传入一个文件路径,可以尝试通过文件路径获取目录,然后再从目录的子项中获取Shell项 >>"c:\pshell\00-copy.ps1"
- echo trap [System.Management.Automation.MethodInvocationException]>>"c:\pshell\00-copy.ps1"
- echo { >>"c:\pshell\00-copy.ps1"
- echo $Path = $Path.ToString() >>"c:\pshell\00-copy.ps1"
- echo $dir = $Path.Substring( 0 ,$Path.LastIndexOf('\') ) >>"c:\pshell\00-copy.ps1"
- echo return $shell.NameSpace($dir).items() ^| >>"c:\pshell\00-copy.ps1"
- echo where { (-not $_.IsFolder ) -and $_.path -eq $Path} ^|>>"c:\pshell\00-copy.ps1"
- echo select -First ^1>>"c:\pshell\00-copy.ps1"
- echo continue>>"c:\pshell\00-copy.ps1"
- echo } >>"c:\pshell\00-copy.ps1"
- echo $shell.NameSpace($Path).self >>"c:\pshell\00-copy.ps1"
- echo } >>"c:\pshell\00-copy.ps1"
-
- echo # >>"c:\pshell\00-copy.ps1"
- echo # 查看 Shell 子项,支持递归和过滤>>"c:\pshell\00-copy.ps1"
- echo # >>"c:\pshell\00-copy.ps1"
- echo function Get-ChildShellItem>>"c:\pshell\00-copy.ps1"
- echo { >>"c:\pshell\00-copy.ps1"
- echo param(>>"c:\pshell\00-copy.ps1"
- echo $Path=17,>>"c:\pshell\00-copy.ps1"
- echo [switch]$Recurse,>>"c:\pshell\00-copy.ps1"
- echo $Filter=$null) >>"c:\pshell\00-copy.ps1"
-
- echo #内部过滤器>>"c:\pshell\00-copy.ps1"
- echo Filter myFilter>>"c:\pshell\00-copy.ps1"
- echo {>>"c:\pshell\00-copy.ps1"
- echo if($Filter){>>"c:\pshell\00-copy.ps1"
- echo $_ ^| where { $_.Name -match $Filter } >>"c:\pshell\00-copy.ps1"
- echo }>>"c:\pshell\00-copy.ps1"
- echo else{>>"c:\pshell\00-copy.ps1"
- echo $_>>"c:\pshell\00-copy.ps1"
- echo }>>"c:\pshell\00-copy.ps1"
- echo }>>"c:\pshell\00-copy.ps1"
-
- echo $shellItem = Get-ShellItem $Path>>"c:\pshell\00-copy.ps1"
- echo $shellItem ^| myFilter>>"c:\pshell\00-copy.ps1"
- echo # 如果是目录 >>"c:\pshell\00-copy.ps1"
- echo if( $shellItem.IsFolder ){>>"c:\pshell\00-copy.ps1"
- echo # 如果指定递归 >>"c:\pshell\00-copy.ps1"
- echo if($Recurse) { >>"c:\pshell\00-copy.ps1"
- echo $shellItem ^| myFilter>>"c:\pshell\00-copy.ps1"
- echo $stack=New-Object System.Collections.Stack>>"c:\pshell\00-copy.ps1"
- echo # 当前目录压入堆栈 >>"c:\pshell\00-copy.ps1"
- echo $stack.Push($shellItem)>>"c:\pshell\00-copy.ps1"
- echo while($stack.Count -gt 0)>>"c:\pshell\00-copy.ps1"
- echo {>>"c:\pshell\00-copy.ps1"
- echo # 访问栈顶元素>>"c:\pshell\00-copy.ps1"
- echo $top = $stack.Pop()>>"c:\pshell\00-copy.ps1"
- echo $top ^| myFilter>>"c:\pshell\00-copy.ps1"
-
- echo # 访问栈顶元素的子元素>>"c:\pshell\00-copy.ps1"
- echo $top.GetFolder.items() ^| foreach {>>"c:\pshell\00-copy.ps1"
- echo if( $_.IsFolder )>>"c:\pshell\00-copy.ps1"
- echo { $stack.Push($_) }>>"c:\pshell\00-copy.ps1"
- echo else { $_ ^| myFilter }>>"c:\pshell\00-copy.ps1"
- echo }>>"c:\pshell\00-copy.ps1"
- echo }>>"c:\pshell\00-copy.ps1"
- echo } >>"c:\pshell\00-copy.ps1"
- echo else{ >>"c:\pshell\00-copy.ps1"
- echo $shellItem.GetFolder.items() ^| myFilter }>>"c:\pshell\00-copy.ps1"
- echo } >>"c:\pshell\00-copy.ps1"
- echo } >>"c:\pshell\00-copy.ps1"
-
- echo # >>"c:\pshell\00-copy.ps1"
- echo # 复制Shell项>>"c:\pshell\00-copy.ps1"
- echo # >>"c:\pshell\00-copy.ps1"
- echo function Copy-ShellItem>>"c:\pshell\00-copy.ps1"
- echo {>>"c:\pshell\00-copy.ps1"
- echo param($Path,$Destination)>>"c:\pshell\00-copy.ps1"
- echo $shell=Get-ShellProxy>>"c:\pshell\00-copy.ps1"
- echo $shell.NameSpace($Destination).Copyhere($Path,4)>>"c:\pshell\00-copy.ps1"
- echo }>>"c:\pshell\00-copy.ps1"
-
- echo # >>"c:\pshell\00-copy.ps1"
- echo # 删除Shell项>>"c:\pshell\00-copy.ps1"
- echo # >>"c:\pshell\00-copy.ps1"
- echo function Remove-ShellItem>>"c:\pshell\00-copy.ps1"
- echo {>>"c:\pshell\00-copy.ps1"
- echo param($Path)>>"c:\pshell\00-copy.ps1"
- echo $ShellItem = Get-ShellItem $Path>>"c:\pshell\00-copy.ps1"
- echo $ShellItem.InvokeVerb('delete')>>"c:\pshell\00-copy.ps1"
- echo }>>"c:\pshell\00-copy.ps1"
-
- echo # >>"c:\pshell\00-copy.ps1"
- echo # 移动Shell项>>"c:\pshell\00-copy.ps1"
- echo # >>"c:\pshell\00-copy.ps1"
- echo function Move-ShellItem>>"c:\pshell\00-copy.ps1"
- echo {>>"c:\pshell\00-copy.ps1"
- echo param($Path,$Destination)>>"c:\pshell\00-copy.ps1"
- echo $shell=Get-ShellProxy>>"c:\pshell\00-copy.ps1"
- echo $shell.NameSpace($Destination).MoveHere($Path,16)>>"c:\pshell\00-copy.ps1"
- echo }>>"c:\pshell\00-copy.ps1"
-
-
- echo # 文件存放的地址>>"c:\pshell\00-copy.ps1"
- echo $des = 'D:\'>>"c:\pshell\00-copy.ps1"
-
-
-
- echo # 匹配相机的关键字,比如:canon,nokia,Windows Phone>>"c:\pshell\00-copy.ps1"
- echo $keywords = 'canon','nokia','Windows Phone'>>"c:\pshell\00-copy.ps1"
- echo foreach ($keyword in $keywords)>>"c:\pshell\00-copy.ps1"
- echo {>>"c:\pshell\00-copy.ps1"
-
- echo $phones = Get-ChildShellItem ^| where { $_.name -like "*$keyword*" }>>"c:\pshell\00-copy.ps1"
- echo foreach ($phone in $phones)>>"c:\pshell\00-copy.ps1"
- echo {>>"c:\pshell\00-copy.ps1"
-
- echo if($phone -eq $null)>>"c:\pshell\00-copy.ps1"
- echo {>>"c:\pshell\00-copy.ps1"
- echo break>>"c:\pshell\00-copy.ps1"
- echo }>>"c:\pshell\00-copy.ps1"
-
- echo Get-ChildShellItem -Path "$($phone.Path)" -Recurse -Filter '((.jpg)^|(.crw)^|(.cr2)^|(.avi)^|(.mov)^|(.mp4))$' ^| foreach {>>"c:\pshell\00-copy.ps1"
- echo #获取照片创建日期>>"c:\pshell\00-copy.ps1"
- echo $datestr = $_.Parent.GetDetailsOf($_,3)>>"c:\pshell\00-copy.ps1"
- echo $datestr=(get-date).tostring("yyyy-MM")>>"c:\pshell\00-copy.ps1"
- echo #新建日期文件夹>>"c:\pshell\00-copy.ps1"
- echo $dir = Join-Path $des $datestr>>"c:\pshell\00-copy.ps1"
- echo if( -not (Test-Path $dir) ) {>>"c:\pshell\00-copy.ps1"
- echo mkdir $dir>>"c:\pshell\00-copy.ps1"
- echo }>>"c:\pshell\00-copy.ps1"
-
- echo # 如果文件存在,先删掉>>"c:\pshell\00-copy.ps1"
- echo $file="{0}\{1}" -f $dir,$_.name>>"c:\pshell\00-copy.ps1"
- echo if( test-path $file) { remove-item $file }>>"c:\pshell\00-copy.ps1"
-
- echo # 复制文件>>"c:\pshell\00-copy.ps1"
- echo Copy-ShellItem -Path $_ -Destination $dir>>"c:\pshell\00-copy.ps1"
- echo # 移动文件>>"c:\pshell\00-copy.ps1"
- echo # move-ShellItem -Path $_ -Destination $dir>>"c:\pshell\00-copy.ps1"
-
-
- echo }>>"c:\pshell\00-copy.ps1"
- echo }>>"c:\pshell\00-copy.ps1"
- echo }>>"c:\pshell\00-copy.ps1"
-
-
- echo exit>>"c:\pshell\00-copy.ps1"
-
- echo $des = [environment]::GetFolderPath([System.Environment+SpecialFolder]::MyPictures)>>"c:\pshell\00-copy.ps1"
-
-
- ping 127.0.0.1 -n 3 >nul 2>nul
-
-
-
-
- ———————————————————————
- ftype Microsoft.Powershellscript.1="c:\system32\windowspowershell\v1.0\powershell.exe" "%%1"
- ping 127.0.0.1 -n 2 >nul 2>nul
-
-
-
- echo powershell>>c:\pshell\00-copy.bat
-
- echo WSH.Sleep 2000>>"c:\pshell\00-copy.vbs
- echo set ws=wscript.createobject("wscript.shell")>>c:\pshell\00-copy.vbs
- echo ws.sendkeys "Set-ExecutionPolicy Unrestricted -force{Enter}">>c:\pshell\00-copy.vbs
- echo ws.sendkeys "exit{Enter}">>c:\pshell\00-copy.vbs
- echo ws.sendkeys "exit{Enter}">>c:\pshell\00-copy.vbs
-
-
- start c:\pshell\00-copy.bat
- ping 127.0.0.1 -n 5 >nul 2>nul
-
- start c:\pshell\00-copy.vbs
- ping 127.0.0.1 -n 4 >nul 2>nul
-
- powershell -file "c:\pshell\00-copy.ps1"
-
- explorer "d:\%date:~0,4%-%date:~5,2%"
-
- exit
-
-
- ————————————————————————————————————————————————
- :xp-pshell
-
- exit
复制代码
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |