批处理脚本以读取特定模式并对新文件夹中的文件进行排序

时间:2016-06-03 12:58:19

标签: windows batch-file

我有一个文件夹,其中有数百万个文件,有点像

  

XXXXXX_156_1400093_20160507011119.psv

从这种格式我想要一个批处理脚本,它可能要求我在文件名中以yyymmdd seach的格式输入日期。创建一个包含日期的文件夹,并移动与该日期相关的所有文件。

我尝试了多个示例,因为我不知道脚本,请帮助我。 问候 Saurabh

我尝试过以下代码:

@ECHO on
SETLOCAL
SETLOCAL ENABLEDELAYEDEXPANSION

SET "sourcedir=C:\Users\sswarpal\Desktop\files"
PUSHD %sourcedir%
FOR /f "tokens=1,2,3,4 delims=_" %%a IN (
 'dir /b /a-d "*.psv"'
 ) DO (  
 MD %%a
 MOVE "%%a %%b" .\%%a\
)
POPD
GOTO :EOF

2 个答案:

答案 0 :(得分:1)

  

批处理脚本可能要求我以yyymmdd seach格式输入日期   在文件名中的那个日期。创建一个包含日期和移动的文件夹   与特定日期相关的所有文件。

保持简单。将通配符与move一起使用,而不是使用复杂的for循环

set /p "day=Enter Date (YYYYMMDD): "
md %day% 2>nul
move "*%day%??????.psv" %day%

如果您想自动执行(如代码所示):仅使用随机参数无效(令牌1 %%aXXXXXX,但您想创建一个带日期的子目录(令牌4的一部分))。您move的参数似乎完全是随机的 试试这个:

@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
SET "sourcedir=C:\Users\sswarpal\Desktop\files"
PUSHD %sourcedir%
FOR /f "tokens=1,2,3,4 delims=_" %%a IN ('dir /b /a-d "*.psv"') DO (  
   set day=%%d
   set day=!day:~0,8!
   echo md !day! 2>nul
   echo MOVE "%%a_%%b_%%c_%%d" .\!day!\
)
popd

当输出看起来像你想要的那样时,删除单词echo

答案 1 :(得分:0)

将以下代码保存在批处理文件中(例如 myMover.bat )。从命令行窗口运行文件时,请在命令行中提供所需的日期作为唯一参数,如:

myMover 20160508

以下是代码:

@ECHO off
SETLOCAL
SETLOCAL ENABLEDELAYEDEXPANSION
if "%1"=="" goto syntax
SET sourcedir="C:\Users\sswarpal\Desktop\files"
PUSHD %sourcedir%
if not exist %1 MD %1
FOR /F %%i IN ('dir /b *_%1*.psv') DO move "%%~ni%%~xi" %1
POPD
goto :eof

:syntax
Echo.
Echo Syntax:
Echo %0 YYYYMMDD
Echo.