Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从文件名windows脚本修剪日期_Windows_Batch File - Fatal编程技术网

从文件名windows脚本修剪日期

从文件名windows脚本修剪日期,windows,batch-file,Windows,Batch File,如何从文本文件中修剪日期。例如,我有多个文件,如: test_MX_abc_20091011.txt test_MX_pqrdhdsu_20091011.txt test_MX_xyieuz_20091011.txt 所有文件都有共同的test_MX,但第三部分大小不同 我想换成: test_MX_abc.txt test_MX_pqrdhdsu.txt test_MX_xyieuz.txt 我知道如果文件名类似于test_20091011.txt并带有以下代码,如何更改该文件,但如果文

如何从文本文件中修剪日期。例如,我有多个文件,如:

  • test_MX_abc_20091011.txt

  • test_MX_pqrdhdsu_20091011.txt

  • test_MX_xyieuz_20091011.txt

所有文件都有共同的test_MX,但第三部分大小不同

我想换成:

  • test_MX_abc.txt
  • test_MX_pqrdhdsu.txt
  • test_MX_xyieuz.txt
我知道如果文件名类似于test_20091011.txt并带有以下代码,如何更改该文件,但如果文件名包含更多的字符串和日期,如何更改

for /F "tokens=1 delims=_" %%i in ("%%~na") do (
     move /Y %%~fa %data_in%\%%i%%~xa >nul
)

提前感谢。

此重命名操作可以通过以下方式完成:

@echo off
for /F "tokens=1-3* delims=_" %%A in ('dir /A-D /B test_MX_*.txt') do (
    ren "%%A_%%B_%%C_%%D" "%%A_%%B_%%C.txt"
)
每个文件名被分成4个字符串,分配给循环变量AD,使用下划线作为分隔符。循环变量D将文件名的所有内容都放在第三个下划线之后

或同时处理3个文件:

@echo off
setlocal EnableDelayedExpansion
for /F "delims=" %%F in ('dir /A-D /B test_MX_*.txt') do (
    set "ActFileName=%%~nF"
    set "NewFileName=!ActFileName:~0,-9!"
    ren "%%~F" "!NewFileName!.txt"
)
endlocal
此解决方案将不带文件扩展名和路径的文件名分配给环境变量
ActFileName
。接下来,将使用活动文件名定义一个名为
NewFileName
的新环境变量,该文件名不包含最后9个字符(下划线和日期字符串)。此修改后的文件名将在重命名操作中使用

可以在堆栈溢出上找到使用命令forsetren的其他解决方案。
用字符串搜索

[batch-file] for set rename files
600多个结果都或多或少地使用了类似上面的东西

有关所用命令的详细信息,请打开命令提示窗口,依次执行以下命令并阅读输出帮助

  • dir/?
  • 获取/?
  • ren/?
  • 设置/?

使用您的ren命令,我需要为每个文件执行一次。下面是我可以做的,但这将在第一个字符串处进行分隔。对于/F“tokens=1 delims=\\%%i%%xa>nul中的“%%i”(“%%na”)do(move/Y%%~fa%data\\%%u in%%\%%i%%~xa>nul),感谢Mofi的评论。我在问题中补充了更多细节。