我是脚本新手。
我想创建一个查看特定源文件夹的批处理文件,并将文件的前8个字符与文本文件中的8个字符相匹配,然后将其移动到特定文件夹。
例如:
我在C:\ ABCDEFGHblahblah.pdf
存储在名为BPD的批处理文件目录中的文本文件包含许多逗号分隔的8个字符,如ABCDEFGH,STUVWXYZ。
脚本必须搜索所有txt文件的内容(在批处理文件目录中)然后如果ABCDEFGH存在于BPD.txt文件中,则将ABCDEFGHblahblah.pdf移动到BPD文件夹,如果该文件夹不存在则创建它
我正在寻找一个文本文件作为外部源的原因是因为8个字符非常动态,超级用户可以根据需要添加/删除/编辑新字符。
我在想......
@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
SET sourcedir="C:\Test"
SET batchtxt="C:\BPD.txt, KLM.txt"
SET destdir="C:\Test"
FOR /f "delims=" %%a IN (
'dir /b /a-d "%sourcedir%\*" '
) DO (
MOVE "%sourcedir%\%%a" "%destdir%\!name!\" >nul
)
这不起作用,请帮忙
答案 0 :(得分:0)
也许不是防弹的,但可以作为基础使用并根据需要进行调整。
真实文件/文件夹操作前面有ECHO
命令。如果输出到控制台是正确的,请删除ECHO
移动文件/创建文件夹。
@echo off
rem Prepare environment
setlocal enableextensions disabledelayedexpansion
rem Configure source of files
set "sourceDir=c:\test"
set "targetDir=c:\test\output"
rem Read all data in ???.txt files in batch file directory into environment variables
for %%f in ("%~dp0\???.txt") do for /f "tokens=* usebackq" %%l in ("%%~ff") do for %%t in (%%l) do set "_$%%~t=%%~nf"
rem For each file in source directory
for %%f in ("%sourceDir%\*") do (
rem take 8 characters from file name and retrieve target from environment variable
set "target=%%~nf"
setlocal enabledelayedexpansion
for %%i in ("!target:~0,8!") do set "target=!_$%%~i!"
rem if target found, move the file to target directory
if defined target (
if not exist "%targetDir%\!target!" ECHO md "%targetDir%\!target!" >nul
ECHO move "%%~ff" "%targetDir%\!target!"
)
endlocal
)
rem Clean
endlocal
答案 1 :(得分:0)
@ECHO OFF
SETLOCAL
SET "sourcedir=c:\sourcedir"
SET "destdir=c:\destdir"
SET "textfiles=c:\bpd\*.txt"
:: For my testing
SET "textfiles=q20649661.txt"
FOR /f "usebackqtokens=1,2delims=, " %%a IN ("%textfiles%") do (
IF EXIST "%sourcedir%\%%a*.pdf" (
ECHO MD "%destdir%\%%b"
ECHO MOVE "%sourcedir%\%%a*.pdf" "%destdir%\%%b\"
)
)
GOTO :EOF
'你的规格非常清楚。
对于我的测试,我设置了q20649661.txt
内容
ABCDEFGH, STUVWXYZ
并建立了一个名为c:\sourcedir\ABCDEFGH123.pdf
运行的结果是
MD "c:\destdir\STUVWXYZ"
MOVE "c:\sourcedir\ABCDEFGH*.pdf" "c:\destdir\STUVWXYZ\"
我认为这是你想要的。
请注意,将2>nul
附加到MD
命令会在目录已存在时禁止显示错误的错误消息。