标题: [文件操作] [已解决]拖放文件后批处理所指路径变更 [打印本页]
作者: 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- @echo off
- setlocal enabledelayedexpansion
- ::初步验证
- if "%~1"=="" (
- echo 您没有拖入文件到我身上,于是第一个参数为空,按任意键拜拜~
- pause>nul
- exit
- ) else (
- if exist "%~1" (
- echo 文件所在目录 "%~dp1"
- cd "%~dp1"
- echo 进入拖放文件所在文件夹 %cd%
- set /a n=1
- set "xformat=%~x1"
- )
- )
- 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
- @echo off
- echo.%*
- echo.%cd%
- 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分钟
另外,我也有些马大哈了~
解决了,顺当贴出重命名代码了- @echo off
- setlocal enabledelayedexpansion
- ::初步验证
- if "%~1"=="" (
- echo 您没有拖入文件到我身上,于是第一个参数为空,按任意键拜拜~
- pause>nul
- exit
- ) else (
- if exist "%~1" (
- echo 拖放文件所在文件夹 "%~dp1"
- echo _
- set /p "inp=批量重命名之前,请指定名字前缀:"
- set /a n=1
- set "xformat=%~x1"
- set "xpath=%~dp1"
- ) else (echo 有参数但不对头,拜拜 &pause>nul &exit)
- )
-
- ::如果%~1非空,才会到达这里
- :main
- if not "%~1"=="" (
- if exist "%~1" (
- echo 执行的操作: ren "%~nx1" "!inp!!n!%~x1%#"
- ren "%~1" "!inp!!n!%~x1%#"
- set /a n+=1
- ) else (echo "%~1" is not exist)
- shift /1
- goto :main
- ) else (
- echo 现在还原格式 ren "%xpath%*%xformat%#" "*%xformat%"
- ren "%xpath%*%xformat%#" "*%xformat%"
- pause
- exit
- )
复制代码
可以把异地的文件拖过来处理的,不必移到文件所在目录。
制作原因: 拍一个物品各个角度的图片,都排了很多张,
按顺序重命名的时候想按角度分类的,感觉一个个拖到文件夹麻烦
还是拖动好,可以直接选中那个角度的图片拖到批处理,也不会混淆。
有不足/不对之处,敬请斧正~
关于其中的 给格式+# 又还原的“多余操作”,缘由请看此帖:
http://www.bathome.net/viewthread.php?tid=5341
批量重命名可能存在的冲突
[ 本帖最后由 523066680 于 2010-4-12 21:09 编辑 ]
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |