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

[文件操作] 批处理如何拖入文件,按照时间顺序重新标号文件?

需求如题。曾经写过类似的一个批处理:
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. echo 请输入文件名
  4. set /p str1=
  5. :b
  6. set /a num+=1
  7. ren "%~f1" "%str1%!num!%~x1"
  8. shift
  9. if not "%~1"=="" goto:b
  10. pause
复制代码
这个批处理实现通过拖动文件到批处理上自动打开cmd窗口并进行重命名,但是重命名的顺序我测试是随机的。我现在的想法是,拖动若干文件到批处理文件上,按照文件修改时间的顺序排列好这若干文件,并标号。有没有大大提供以下思路,谢谢!

本帖最后由 fatcat 于 2012-3-30 15:11 编辑

回复 1# hrhktkbzyy


    难点在 "若干" 两个字上, 有一篇相关的帖子: 多个文件拖到cmd窗口后,如何获取每一文件的完整路径

TOP

本帖最后由 batman 于 2012-3-30 18:51 编辑
  1. @echo off&setlocal enabledelayedexpansion
  2. if "%~1" equ "" goto :eof
  3. set /p name=请输入文件名:
  4. for %%a in (%*) do set "str=!str! "%%a""
  5. for /f "delims=" %%a in ('dir /tw /od /b /s !str:~1!') do (
  6.   set /a n+=1
  7.   ren "%%~dpnxa" "!name!_!n!%%~xa"
  8. )  
复制代码
***共同提高***

TOP

回复 3# batman

有问题,
删掉一行
if "%1" equ "" goto :eof
修改一行:
for %%a in (%*) do set "str=!str! "%%~a""
后运行通过, 但对路径中有某些特殊字符仍不能处理, 比如 ^
  1. @echo off&setlocal enabledelayedexpansion
  2. set /p name=请输入文件名:
  3. for %%a in (%*) do set "str=!str! "%%~a""
  4. for /f "delims=" %%a in ('dir /tw /od /b /s !str:~1!') do (
  5.   set /a n+=1
  6.   ren "%%~dpnxa" "!name!_!n!%%~xa"
  7. )
复制代码

TOP

回复 2# fatcat
谢谢你的指教。这个问题解决了。还有两个其他问题想请教一下。
1.set “a=!s!” 和set a=!s!有什么区别?引号有什么用处?

2.下面这段代码是将拖入窗口的文件按照:修改时间_标号处理的,原理应该是和上面的一样,但是为什么每次都提示系统找不到指定路径?
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for %%a in (%*) do set "str=!str! "%%~a""
  4. set /p w=输入数字宽度,[如:time_00001,请输入5]
  5. for /f "delims=" %%a in ('dir /tw /od /b /s !str:~1!') do (
  6.   if defined s set s0=!s:~,10!
  7.   set "s=%%~ta"
  8.   set s=!s:~,10!
  9.   if not "!s0!"=="!s!" set n=0
  10.   set /a n+=1
  11.   set "no=0000000!n!"  
  12.   set "no=!no:~-%w%!"  
  13.   ren "%%~fa" "!s!_!no!%%~xa"
  14. )
复制代码

TOP

回复 3# batman
谢谢指教!还有一个问题见楼上。麻烦帮忙看一下是哪里出了问题,我找了好半天也没看出哪里错了。

TOP

回复 4# fatcat
第二个问题找到原因了,时间里面的“/”是非法字符。

TOP

回复 7# hrhktkbzyy

1. set 后面双引号的用途, 请仔细查看比较以下代码及输出结果(_ 可以改成其它的若干字符, 常见的有空白字符):
  1. set a=^&
  2. set a
  3. set b=%a%cd
  4. set b
  5. set "b=%a%cd"
  6. set b
  7. set "str=asdf"_
  8. set str
  9. set str=asdf_
  10. set str
复制代码
2. 用你的代码测试了, 正常, 所以也正猜测是你的时间格式在代码中影响了运行.

TOP

返回列表