创建批处理文件以根据内容重命名TXT文件(删除不适当的语法)

时间:2016-11-10 20:00:34

标签: batch-file for-loop rename

我正在尝试创建一个批处理文件,允许我根据测试文件本身内的文本重命名文件夹中的所有文件。我已粘贴以下文字中的前四行:

09-Nov-16  07:50 AM                              HAND-HELD DRIVER REPORT                                              PAGE:  1 
                                             XYZ COMPANY - AR1    

    DATE > 11/09/16    DRIVER > 1010    DRIVER NAME > Mike Smith TRUCK > 4719

我想命名每个文件夹DATE-DRIVER NAME-TRUCK。我还需要在日期字段中删除" /"'任何帮助都会非常感激!

2 个答案:

答案 0 :(得分:0)

@ECHO OFF
SETLOCAL
SET "sourcedir=U:\sourcedir"
FOR /f "delims=" %%x IN (
 'dir /b /a-d "%sourcedir%\*.txt" '
 ) DO (
 SET "oldname=%%x"
 SET "newname="
 SET "drivname="
 REM detect a line with 4 ">"
 REM Process only the first found in a file
 FOR /f "usebackqtokens=1-5delims=>" %%a IN (
  "%%x") DO IF NOT DEFINED newname IF "%%e" neq "" (
  REM process date into %%i, %%j, %%k
  FOR /f "tokens=1-3delims=/ " %%i IN ("%%b") DO (
   REM build drivname
   CALL :procname %%d
   REM build new filename and rename file
   CALL :build %%k %%i %%j %%e
  )
  IF NOT DEFINED newname ECHO %%x NOT renamed
 )
)

GOTO :EOF

:procname
IF "%2"=="" GOTO :EOF
SET "drivname=%Drivname% %1"
shift
GOTO procname

:build
IF NOT DEFINED drivname GOTO :EOF
SET "newname=%1%2%3-%drivname:~1%-%4"
IF /i "%oldname%" neq "%newname%" (
 ECHO(REN "%sourcedir%\%oldname%" "%newname%"
)
GOTO :eof

您需要更改sourcedir的设置以适合您的具体情况。

为了测试目的,所需的REN命令仅为ECHO在您确认命令正确后,将ECHO(REN更改为REN以实际重命名文件。

相对简单:

将每个文件名处理为%%x。使用该文件名,查找包含4 >的行当找到该行时(%%e将为非空),则日期将在%%b中,因此将其解析为{{ 1}}并在%%i,j,k中处理名称+ TRUCK字符串。最后,将这些元素组合在一起 - %%d中的年份,%%k中的月份,%%i中的日期,%%j中的卡车号码以及%drivname%中的drivername。

%%e例程确保:build存在,并根据提供的参数和drivname构建新文件名。如果新旧名称相同(不区分大小写),则重命名将产生错误(文件先前已经处理过),因此请跳过重命名。由于在drivname例程中建立了newname,因此一旦重命名,就不会重复。

最后,如果没有:build设置,那么该文件没有获得所需格式的行,因此报告该事实。

答案 1 :(得分:0)

这是我的尝试,更改BaseFld以适应您的环境

    if let settings = UIApplication.shared.currentUserNotificationSettings {
         if settings.types != UIUserNotificationType() {
             print("is on!")
         }else{
             print("is off!")
         }
}else{
     print("is off")
}

结果

@Echo off
Set BaseFld=Q:\Test\2016-11\10\
Set Files=*.txt
PushD %BaseFld%

For %%A in (%Files%) Do For /f "tokens=2-5 delims=>" %%B IN (
  'findstr "DATE.*DRIVER.*DRIVER.NAME.*TRUCK" "%%~fA"'
    ) Do Call :Rename "%%~A" "%%B" "%%C" "%%D" "%%E"
PopD
Goto :Eof

:Rename
: Parse Date to yyMMdd
For /F "Tokens=1-3 Delims=/ " %%F in (%2) Do Set _YMD=%%H%%F%%G
For /F %%F in (%3) Do Set _DriverNo=%%F
Set _DriverName=%~4
Set _DriverName=%_DriverName: TRUCK=%
Set /A _TruckNo=%~5
Set "NewName=%_YMD%%_DriverName: =-%%_TruckNo%%~x1"
If /i "%~nx1" neq "%NewName%" Echo Ren %1 "%NewName%"

编辑要真正重命名最后一行中的回声必须删除。包含if以防止重命名已处理的文件。