我正在尝试在Windows 7上创建一个批处理脚本来执行以下操作:
我有一个文件夹,其他程序将文件转储到。 所有文件的名称中都有数字以及其他识别信息。 我想让批处理脚本搜索文件名中的所有数字,然后创建一个文件夹(文件夹名称只是数字)并将包含这些数字的所有文件移动到该文件夹。 它必须适用于我办公室的众多用户。
目前我有一个非常糟糕的原始系统运行,但没有解决错误:
@echo off
setlocal enabledelayedexpansion
pushd "%USERPROFILE%\Desktop\RawFiles"
for %%a in (*) do (
set fldr=%%~na
set fldr=!fldr:~0,5!
md "!fldr!"
move "%%a" "!fldr!"
)
popd
if not exist "%USERPROFILE%\Dropbox\agents" mkdir "%USERPROFILE%\Dropbox\agents"
SET "src_folder=%USERPROFILE%\Desktop\RawFiles"
SET "tar_folder=%USERPROFILE%\Dropbox\agents"
for /f %%a IN ('dir "%src_folder%" /b') do move /-y %src_folder%\%%a %tar_folder%
exit
the files in the "rawfiles" folder are as follows:
12345 - tech pack.pdf
12345.pdf
12345-artwork.AI
"#12345- artwork.AI"
我创建的内容仅适用于数字在文件中排在第一位且完全为5的完美实例。 不幸的是,这里存在很多人为错误,因此这种解决方案不可行。 错误的一个例子是偶然的6位数字,甚至在数字前加上“#”符号
我还希望能够通过运行两次来覆盖目标文件夹中的文件,但是我得到了“拒绝访问”。
请帮忙!
谢谢
答案 0 :(得分:1)
下面的批处理文件从请求中提取文件名中的数字(最多6组数字由其他字符分隔,这可能会被修改),因此您可以以任何方式操纵它们; ECHO
命令只是示例。请注意,空格必须是eliminate
变量中的最后一个字符。
@echo off
setlocal EnableDelayedExpansion
set "eliminate=#-abcdefghijklmnopqrstuvwxyz "
for %%a in (*.*) do (
for /F "tokens=1-6 delims=%eliminate%" %%b in ("%%~Na") do set folder=%%b%%c%%d%%e%%f%%g
if not exist "!folder!" ECHO md "!folder!"
ECHO move "%%a" "!folder!"
)