我正在尝试创建一个批处理文件,允许我根据测试文件本身内的文本重命名文件夹中的所有文件。我已粘贴以下文字中的前四行:
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。我还需要在日期字段中删除" /"'任何帮助都会非常感激!
答案 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以防止重命名已处理的文件。