标题: [文本处理] 移动照片的批处理如何可以改成可用D盘? [打印本页]
作者: waiman 时间: 2013-11-28 00:09 标题: 移动照片的批处理如何可以改成可用D盘?
请问如何可以改成可用D盘? 谢谢.
我在C盘有文件夹C:\1, C:\2, C:\3, 我把x.bat放在C:\3\x.bat, 运行是能工作的, 但如我想把set "DstDir=C:\2", 改成到D盘set "DstDir=D:\2", 就不能正常工作了:- @echo off
- set "SrcDir=C:\1"
- set "DstDir=C:\2"
- pushd "%SrcDir%\"
- for /f "delims=" %%a in ('dir /ad/on/b^|findstr /ibe "[0-9]*"') do (
- if exist 1.jpg (
- md "%DstDir%" 2>nul
- move "%%a" "%DstDir%\" && move 1.jpg "%DstDir%\%%a\" && move 2.jpg "%DstDir%\%%a\" && move 3.jpg "%DstDir%\%%a\" && move 4.jpg "%DstDir%\%%a\" "%DstDir%\%%a\"
- )
- )
复制代码
作者: apang 时间: 2013-11-28 10:24
你想做什么?也就是你想达到什么样的目的?
作者: waiman 时间: 2013-11-28 10:46
本帖最后由 waiman 于 2013-11-28 10:51 编辑
你想做什么?也就是你想达到什么样的目的?
apang 发表于 2013-11-28 10:24
文件夹C:\1, 内有很多号码顺序的文件夹, 例如1000, 1001, 1002, 等等.
然后我每一次拍照, 是1.jpg, 至最多到4.jpg, 4张照片, 会放在文件夹C:\1内.
然后我会运行C:\3\x.bat, 用來自动把号码顺序的文件夹, 例如文件夹1000, C:\1\1000, 移动到文件夹C:\2内, 同时也把jpg, 例如C:\1\1.jpg (最多到4.jpg)也移动到C:\2\1000的文件内.
我一直用那x.bat, 运作得很好没问题. 现在我只是想把本来是移到C:\2的, 改成移到D:\2.
但那C:\3\x.bat只能把文件夹和jpg移到C的硬盘, 不能改成移到D的硬盘.
作者: apang 时间: 2013-11-28 11:38
回复 3# waiman
move 不能跨分区移动文件夹,可以先拷贝再删除
这样试试:- @echo off
- set "SrcDir=C:\1"
- set "DstDir=D:\2"
- pushd "%SrcDir%\"
- for /f "delims=" %%a in ('dir /ad/on/b^|findstr /ibe "[0-9]*"') do (
- if exist 1.jpg (
- xcopy /s /y "%%a\*" "%DstDir%\%%a\"
- rd /s /q "%%a"
- move *.jpg "%DstDir%\%%a\"
- )
- exit /b
- )
复制代码
作者: waiman 时间: 2013-11-28 11:56
回复 waiman
move 不能跨分区移动文件夹,可以先拷贝再删除
这样试试:
apang 发表于 2013-11-28 11:38
这不行, 它只会删除了文件夹1000. 除此之外, 没见其它改变.
作者: apang 时间: 2013-11-28 12:44
回复 5# waiman
额,我测试没有问题。除非你的系统没有xcopy.exe,否则不会出现你所说的情况
作者: waiman 时间: 2013-11-28 14:39
本帖最后由 waiman 于 2013-11-28 14:41 编辑
回复 waiman
额,我测试没有问题。除非你的系统没有xcopy.exe,否则不会出现你所说的情况
apang 发表于 2013-11-28 12:44
我再试了, 还是一样, 我的是Windows 7 Pro 64bit, 在c:\Windows\System32\xcopy.exe, 和c:\Windows\SysWOW64\xcopy.exe都有.
作者: DAIC 时间: 2013-11-28 16:09
回复 5# waiman
把4楼的第一行删掉,看看执行过程。
作者: apang 时间: 2013-11-28 21:01
本帖最后由 apang 于 2013-11-28 21:30 编辑
回复 7# waiman
明白了,你的c:\1\1000为空目录,xcopy /s 不能复制空目录,是不是?- @echo off
- set "SrcDir=C:\1"
- set "DstDir=D:\2"
- pushd "%SrcDir%\"
- for /f "delims=" %%a in ('dir /ad/on/b^|findstr /ibe "[0-9]*"') do (
- if exist 1.jpg (
- md "%DstDir%\%%a\" 2>nul
- xcopy /s /y "%%a\*" "%DstDir%\%%a\"
- rd /s /q "%%a"
- move *.jpg "%DstDir%\%%a\"
- )
- exit /b
- )
复制代码
作者: waiman 时间: 2013-11-29 00:08
回复 waiman
明白了,你的c:\1\1000为空目录,xcopy /s 不能复制空目录,是不是?
apang 发表于 2013-11-28 21:01
对不起, 我是完全不懂的. 不过这次行了, 非常谢谢你替我解决了这问题.
作者: waiman 时间: 2013-11-30 10:18
回复 waiman
明白了,你的c:\1\1000为空目录,xcopy /s 不能复制空目录,是不是?
apang 发表于 2013-11-28 21:01
发现一个问题. 现在是运行得很好的, 但空目录1000, 和1.jpg, 都必需要在C:\1之下.
能否改成1.jpg, 保持在C:\1\1.jpg, 但空目录1000, 是在C:\3\1000呢?
作者: apang 时间: 2013-11-30 20:26
回复 11# waiman
都是一些很基础的路径变换问题,不难。如果你能看得懂程序,自己就可以修改。
别人可以帮你一次两次,不可能帮你一生一世,你还是学点批处理基础吧!
作者: waiman 时间: 2013-12-1 00:33
本帖最后由 waiman 于 2013-12-1 00:43 编辑
回复 waiman
都是一些很基础的路径变换问题,不难。如果你能看得懂程序,自己就可以修改。
别人 ...
apang 发表于 2013-11-30 20:26
我就是刚开始自学.
我将set "SrcDir=C:\1", 改为set "SrcDir-1=C:\1"
加set "SrcDir-2=C:\3"
pushd "%SrcDir%\", 改为pushd "%SrcDir-2%\"
if exist 1.jpg (, 改为if "%SrcDir-1%\" exist 1.jpg (
但不行.
作者: apang 时间: 2013-12-1 10:09
这样判断文件存在与否:if [not] exist "路径+文件名" ,省略"路径"的话,就是当前工作路径,即pushd所指向的路径。- @echo off
- set "SrcDir-1=C:\1"
- set "SrcDir-2=C:\3"
- set "DstDir=D:\2"
- pushd "%SrcDir-2%\"
- for /f "delims=" %%a in ('dir /ad/on/b^|findstr "^[0-9][0-9]*$"') do (
- if exist "%SrcDir-1%\1.jpg" (
- md "%DstDir%\%%a\" 2>nul
- xcopy /s /y "%%a\*" "%DstDir%\%%a\"
- rd /s /q "%%a"
- move "%SrcDir-1%\*.jpg" "%DstDir%\%%a\"
- )
- pause & exit /b
- )
复制代码
作者: waiman 时间: 2013-12-1 11:06
本帖最后由 waiman 于 2013-12-1 12:04 编辑
这样判断文件存在与否:if [not] exist "路径+文件名" ,省略"路径"的话,就是当前工作路径,即pushd所指向 ...
apang 发表于 2013-12-1 10:09
了解了, 原来不是if exist "%SrcDir-1%\" 1.jpg
而是if exist "%SrcDir-1%\1.jpg"
现在工作正常, 只是完成后不能自动关闭那Command Prompt窗口.
我已改成能自动关闭了. 谢谢.
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |