Board logo

标题: [文件操作] [已解决]拖放文件后批处理所指路径变更 [打印本页]

作者: 523066680    时间: 2010-4-12 19:41     标题: [已解决]拖放文件后批处理所指路径变更

那天知道可以拖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 编辑 ]
作者: todayambition    时间: 2010-4-12 19:50

楼主把你出问题的批处理test.bat传上来看看
作者: FOR    时间: 2010-4-12 19:54

批处理的默认目录就是当前用户吧
但你说cd/d 还改变不了,我测试没问题
作者: 523066680    时间: 2010-4-12 19:56

噢  再次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 编辑 ]
作者: 523066680    时间: 2010-4-12 20:00     标题: 回复 3楼 的帖子

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

都回到%userprofile%目录。

[ 本帖最后由 523066680 于 2010-4-12 20:02 编辑 ]
作者: x9tiancmd    时间: 2010-4-12 20:00

楼主, 你这种事我遇到过好多次   


   必须这样写才有效

     pushd "%userprofile%\桌面"
作者: hanyeguxing    时间: 2010-4-12 20:01

  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
作者: 523066680    时间: 2010-4-12 20:06

感谢楼上两位,有点明白。
剩下的就是不明白4楼那两个代码为什么一个可以进入桌面,一个却失败了

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

[ 本帖最后由 523066680 于 2010-4-12 20:11 编辑 ]
作者: todayambition    时间: 2010-4-12 20:09     标题: 回复 4楼 的帖子

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

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

[ 本帖最后由 todayambition 于 2010-4-12 20:23 编辑 ]
作者: 523066680    时间: 2010-4-12 20:25

感谢各位 ,问题圆满解决,  整个过程小于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 编辑 ]




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