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

[文本处理] 移动照片的批处理如何可以改成可用D盘?

请问如何可以改成可用D盘? 谢谢.

我在C盘有文件夹C:\1, C:\2, C:\3, 我把x.bat放在C:\3\x.bat, 运行是能工作的, 但如我想把set "DstDir=C:\2", 改成到D盘set "DstDir=D:\2", 就不能正常工作了:
  1. @echo off
  2. set "SrcDir=C:\1"
  3. set "DstDir=C:\2"
  4. pushd "%SrcDir%\"
  5. for /f "delims=" %%a in ('dir /ad/on/b^|findstr /ibe "[0-9]*"') do (
  6. if exist 1.jpg (
  7. md "%DstDir%" 2>nul
  8. 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\"
  9. )
  10. )
复制代码

你想做什么?也就是你想达到什么样的目的?

TOP

本帖最后由 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的硬盘.

TOP

回复 3# waiman


    move 不能跨分区移动文件夹,可以先拷贝再删除
这样试试:
  1. @echo off
  2. set "SrcDir=C:\1"
  3. set "DstDir=D:\2"
  4. pushd "%SrcDir%\"
  5. for /f "delims=" %%a in ('dir /ad/on/b^|findstr /ibe "[0-9]*"') do (
  6.     if exist 1.jpg (
  7.         xcopy /s /y "%%a\*" "%DstDir%\%%a\"
  8.         rd /s /q "%%a"
  9.         move *.jpg "%DstDir%\%%a\"
  10.     )
  11.     exit /b
  12. )
复制代码

TOP

回复  waiman
    move 不能跨分区移动文件夹,可以先拷贝再删除
这样试试:
apang 发表于 2013-11-28 11:38


这不行, 它只会删除了文件夹1000. 除此之外, 没见其它改变.

TOP

回复 5# waiman


    额,我测试没有问题。除非你的系统没有xcopy.exe,否则不会出现你所说的情况

TOP

本帖最后由 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都有.

TOP

回复 5# waiman


    把4楼的第一行删掉,看看执行过程。

TOP

本帖最后由 apang 于 2013-11-28 21:30 编辑

回复 7# waiman


明白了,你的c:\1\1000为空目录,xcopy /s 不能复制空目录,是不是?
  1. @echo off
  2. set "SrcDir=C:\1"
  3. set "DstDir=D:\2"
  4. pushd "%SrcDir%\"
  5. for /f "delims=" %%a in ('dir /ad/on/b^|findstr /ibe "[0-9]*"') do (
  6.     if exist 1.jpg (
  7.         md "%DstDir%\%%a\" 2>nul
  8.         xcopy /s /y "%%a\*" "%DstDir%\%%a\"
  9.         rd /s /q "%%a"
  10.         move *.jpg "%DstDir%\%%a\"
  11.     )
  12.     exit /b
  13. )
复制代码
1

评分人数

TOP

回复  waiman
明白了,你的c:\1\1000为空目录,xcopy /s 不能复制空目录,是不是?
apang 发表于 2013-11-28 21:01


对不起, 我是完全不懂的. 不过这次行了, 非常谢谢你替我解决了这问题.

TOP

回复  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呢?

TOP

回复 11# waiman


    都是一些很基础的路径变换问题,不难。如果你能看得懂程序,自己就可以修改。
别人可以帮你一次两次,不可能帮你一生一世,你还是学点批处理基础吧!

TOP

本帖最后由 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 (

但不行.

TOP

这样判断文件存在与否:if [not] exist "路径+文件名" ,省略"路径"的话,就是当前工作路径,即pushd所指向的路径。
  1. @echo off
  2. set "SrcDir-1=C:\1"
  3. set "SrcDir-2=C:\3"
  4. set "DstDir=D:\2"
  5. pushd "%SrcDir-2%\"
  6. for /f "delims=" %%a in ('dir /ad/on/b^|findstr "^[0-9][0-9]*$"') do (
  7.     if exist "%SrcDir-1%\1.jpg" (
  8.         md "%DstDir%\%%a\" 2>nul
  9.         xcopy /s /y "%%a\*" "%DstDir%\%%a\"
  10.         rd /s /q "%%a"
  11.         move "%SrcDir-1%\*.jpg" "%DstDir%\%%a\"
  12.     )
  13.     pause & exit /b
  14. )
复制代码
1

评分人数

TOP

本帖最后由 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窗口.
我已改成能自动关闭了. 谢谢.

TOP

返回列表