找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 24536|回复: 9

[文件操作] [已解决]拖放文件后批处理所指路径变更

[复制链接]
发表于 2010-4-12 19:41:33 | 显示全部楼层 |阅读模式
那天知道可以拖1个以上的文件到批处理,并可以按逐个参数枚举后
我就想弄个拖放文件式的批量重命名,却出了差错。


测试环境, %userprofile%\桌面  ,批处理名 test.bat
随意拖放桌面的一个文件到 该批处理

在某一步提示:找不到文件。

查来查去代码没错, 看看%cd%才发现变成 %userprofile% 了(C:\Documents and Settings\username)
也就是上一级的用户目录

然后我加了一句 cd /d "%userprofile%\桌面"
再echo %cd%

却仍然处于 C:\Documents and Settings\username
cd 桌面也是如此。
郁闷了,大伙试试是不是这个情况。
求解。

[ 本帖最后由 523066680 于 2010-4-12 21:12 编辑 ]
发表于 2010-4-12 19:50:48 | 显示全部楼层
楼主把你出问题的批处理test.bat传上来看看
发表于 2010-4-12 19:54:38 | 显示全部楼层
批处理的默认目录就是当前用户吧
但你说cd/d 还改变不了,我测试没问题
 楼主| 发表于 2010-4-12 19:56:08 | 显示全部楼层
噢  再次cd 不能进好像是跟批处理有关

test.bat
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. ::初步验证
  4. if "%~1"=="" (
  5.   echo 您没有拖入文件到我身上,于是第一个参数为空,按任意键拜拜~
  6.   pause>nul
  7.   exit
  8. ) else (
  9.   if exist "%~1" (
  10.     echo 文件所在目录 "%~dp1"
  11.     cd "%~dp1"
  12.     echo 进入拖放文件所在文件夹 %cd%
  13.     set /a n=1
  14.     set "xformat=%~x1"
  15.   )
  16. )
  17. pause
复制代码



可以看到我先显示 文件所在目录 ,然后执行cd /d 该目录,再次echo 进入到%cd%
显示却出乎意料
文件所在目录 "C:\Documents and Settings\Amateur\桌面\"
进入拖放文件所在文件夹 C:\Documents and Settings\Amateur


同样是在桌面
这个虽然拖放后变成了用户目录,但是cd 桌面就进入了
@echo off
:a
if not "%~1"=="" (echo 拖放的文件 "%~1" &shift /1 &goto :a)
echo 现在所在目录 %cd%
echo cd /d "%userprofile%\桌面"
cd /d "%userprofile%\桌面"
echo 现在所在目录 %cd%
pause
exit

[ 本帖最后由 523066680 于 2010-4-12 19:59 编辑 ]
 楼主| 发表于 2010-4-12 20:00:20 | 显示全部楼层

回复 3楼 的帖子

哪里
如果不是拖放的话  ,第一句echo %cd% 是显示 在桌面的
但是不管是哪里的文件拖放过来

都回到%userprofile%目录。

[ 本帖最后由 523066680 于 2010-4-12 20:02 编辑 ]
发表于 2010-4-12 20:00:47 | 显示全部楼层
楼主, 你这种事我遇到过好多次   


   必须这样写才有效

     pushd "%userprofile%\桌面"

评分

参与人数 1PB +8 收起 理由
523066680 + 8 谢谢

查看全部评分

发表于 2010-4-12 20:01:30 | 显示全部楼层
  1. @echo off
  2. echo.%*
  3. echo.%cd%
  4. pause
复制代码
无论这个批处理和测试用的jpg文件在什么位置,一拖就显示%cd%为C:\Documents and Settings\寒夜孤星\「开始」菜单

set:
ALLUSERSPROFILE=C:\Documents and Settings\All Users
APPDATA=C:\Documents and Settings\寒夜孤星\Application Data
CLIENTNAME=Console
CommonProgramFiles=C:\Program Files\Common Files
COMPUTERNAME=FENGWANGJIAZU
ComSpec=C:\WINDOWS\system32\cmd.exe
FP_NO_HOST_CHECK=NO
HOMEDRIVE=C:
HOMEPATH=\Documents and Settings\寒夜孤星
LOGONSERVER=\\FENGWANGJIAZU
NUMBER_OF_PROCESSORS=2
OS=Windows_NT
Path=C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\Program Files\Common Files\Thunder Network\KanKan\Codecs;C:\Program Files\Support Tools\;C:\WINDOWS\system32\WindowsPowerShell\v1.0;C:\Program Files\Common Files\Adobe\AGL
PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.PSC1
PROCESSOR_ARCHITECTURE=x86
PROCESSOR_IDENTIFIER=x86 Family 16 Model 6 Stepping 2, AuthenticAMD
PROCESSOR_LEVEL=16
PROCESSOR_REVISION=0602
ProgramFiles=C:\Program Files
PROMPT=$P$G
SESSIONNAME=Console
SystemDrive=C:
SystemRoot=C:\WINDOWS
TEMP=R:\Temp
TMP=R:\Temp
USERDOMAIN=FENGWANGJIAZU
USERNAME=寒夜孤星
USERPROFILE=C:\Documents and Settings\寒夜孤星
windir=C:\WINDOWS

评分

参与人数 1PB +8 收起 理由
523066680 + 8 感谢指教

查看全部评分

 楼主| 发表于 2010-4-12 20:06:04 | 显示全部楼层
感谢楼上两位,有点明白。
剩下的就是不明白4楼那两个代码为什么一个可以进入桌面,一个却失败了

回复真快的说^_^    还有,保佑这个帖子没有重复。

[ 本帖最后由 523066680 于 2010-4-12 20:11 编辑 ]
发表于 2010-4-12 20:09:08 | 显示全部楼层

回复 4楼 的帖子

请将  echo 进入拖放文件所在文件夹 %cd%   一句
中的%cd%改成!cd!

这也是个变量延迟的问题吧

[ 本帖最后由 todayambition 于 2010-4-12 20:23 编辑 ]
 楼主| 发表于 2010-4-12 20:25:05 | 显示全部楼层
感谢各位 ,问题圆满解决,  整个过程小于20分钟

另外,我也有些马大哈了~
解决了,顺当贴出重命名代码了
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. ::初步验证
  4. if "%~1"=="" (
  5.   echo 您没有拖入文件到我身上,于是第一个参数为空,按任意键拜拜~
  6.   pause>nul
  7.   exit
  8. ) else (
  9.   if exist "%~1" (
  10.     echo 拖放文件所在文件夹 "%~dp1"
  11.     echo _
  12.     set /p "inp=批量重命名之前,请指定名字前缀:"
  13.     set /a n=1
  14.     set "xformat=%~x1"
  15.     set "xpath=%~dp1"
  16.   ) else (echo 有参数但不对头,拜拜 &pause>nul &exit)
  17. )

  18. ::如果%~1非空,才会到达这里
  19. :main
  20. if not "%~1"=="" (
  21.    if exist "%~1" (
  22.       echo 执行的操作: ren "%~nx1" "!inp!!n!%~x1%#"
  23.       ren "%~1" "!inp!!n!%~x1%#"
  24.       set /a n+=1
  25.    ) else (echo "%~1" is not exist)
  26.    shift /1
  27.    goto :main
  28. ) else (
  29.    echo 现在还原格式 ren "%xpath%*%xformat%#" "*%xformat%"
  30.    ren "%xpath%*%xformat%#" "*%xformat%"
  31.    pause
  32.    exit
  33. )
复制代码
可以把异地的文件拖过来处理的,不必移到文件所在目录。
制作原因: 拍一个物品各个角度的图片,都排了很多张,
       按顺序重命名的时候想按角度分类的,感觉一个个拖到文件夹麻烦
       还是拖动好,可以直接选中那个角度的图片拖到批处理,也不会混淆。



有不足/不对之处,敬请斧正~

关于其中的 给格式+# 又还原的“多余操作”,缘由请看此帖:
http://www.bathome.net/viewthread.php?tid=5341

批量重命名可能存在的冲突

[ 本帖最后由 523066680 于 2010-4-12 21:09 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-20 12:19 , Processed in 0.021106 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表