通过具有任何特定模式的文件夹
Pass through folder with any specific pattern
我有一个批处理脚本,它只能根据用户输入的代码复制 pdf 文件。一旦他们按下回车键,它就会寻找一个与输入代码具有相同文件名的文件夹。如果存在,它将复制里面的 pdf 文件。
现在我遇到了一个问题,因为在一个子文件夹中,它的文件名没有标准文件名。
比如 ex :有时它的文件名是 UV DATA
其他的是 UV-DATA
, UV
pdf 文件的示例文件夹结构存储:
server
'----22050-022
'----Folder1
22050-022-DATA.pdf
示例文件夹目标:
server2
'----Folder
'----22050-022
'----UV DATA
'----DOCUMENTS
UV DATA
文件夹是唯一发生变化的文件夹。
我怎样才能只设置 UV
而第二个字是任何特定的模式?
XCopy 示例,如果它是静态代码,默认文件名是 UV DATA
:
set /p code=Input Control Number:
xcopy "%MySetPath%\Folder\%code%\%code%-DATA.pdf" "%MySetDestination%\Folder1\%code%\UV DATA\DOCUMENTS\" /D /E /C /I /Y /H
我只试过这样的方法但没有用:
set /p code=Input Control Number:
xcopy "%MySetPath%\Folder\%code%\%code%-DATA.pdf" "%MySetDestination%\Folder1\%code%\UV*.*\DOCUMENTS\" /D /E /C /I /Y /H
文件夹中的通配符在xcopy
等操作中不受支持
这个使用 FOR /F
的解决方案有点老套,但绝对有效:
@echo off
set /p "code=Input Control Number:"
for /f "tokens=* delims= " %%a in ('dir /b /ad "%MySetDestination%\Folder1\%code%\UV*"') (
xcopy "%MySetPath%\Folder\%code%\%code%-DATA.pdf" "%MySetDestination%\Folder1\%code%\UV-%%a\DOCUMENTS\" /D /E /C /I /Y /H
)
这会将文件以 UV<ANYTHING HERE>
格式复制到所有文件夹
试一试。您需要在下面设置源路径和目标路径以确保您具有最佳搜索级别,但是由于使用了 dir /s
,您可以转到源路径和目标路径的最低级别:
@echo off
:start
set /p "code=Input Control Number: "
set "source=%HOMEPATH%\%code%"
set "destination=%HOMEPATH%\folder"
if "%code%" == "" echo Please input a valid Control number & goto start
for /f "delims=" %%i in ('dir /b /a-d /s "%source%" ^| findstr /i "%code%" ^| findstr /i "pdf"') do for /f "delims=" %%a in ('dir /b /s /ad "%destination%" ^| findstr /i "%code%" ^| findstr /i "UV" ^| findstr /i "Documents"') do (
echo "%%a"
echo xcopy "%%~i" "%%~a" "/D /E /C /I /Y /H
)
@echo off
setlocal
rem Change current directory to HOMEDRIVE.
cd /d "%HOMEDRIVE%" || (
>&2 echo Failed to change directory to "%HOMEDRIVE%"
exit /b 1
)
rem Get the control number i.e. 22050-022.
set /p "code=Input Control Number: " || exit /b 0
rem Set initial source path and destination path here.
@rem Note: destination path without trailing "\UV*\DOCUMENTS".
set "source=%HOMEPATH%\%code%\Folder1\%code%-DATA.pdf"
set "destination=%HOMEPATH%\Folder\%code%"
rem Check initial source path.
if not exist "%source%" (
>&2 echo Initial source path "%source%" not exist.
exit /b 1
)
rem Check initial destination path.
if not exist "%destination%" (
>&2 echo Initial destination path "%destination%" not exist.
exit /b 1
)
rem Get "%%destination%%\UV*\DOCUMENTS\" path.
(
set "destination="
for /d %%A in ("%destination%\UV*") do if not defined destination (
@rem Force an echo on line break.
if exist "%%~A\DOCUMENTS\" set "destination=%%~A\DOCUMENTS\"
)
if not defined destination (
>&2 echo Failed to get destination from "%destination%".
exit /b 1
)
)
rem Copy file from source to destination if file date is newer.
xcopy /d /y "%source%" "%destination%"
exit /b 0
这将尝试找到目标路径
UV*
在 OP 中指定的路径中和
评论我的理解。
将目录更改为 %HOMEDRIVE%
其他路径
以 %HOMEPATH%
开头可能无效,如果
当前目录在另一个驱动器上。
如果您使用镜像 %HOMEPATH%
的驱动器
那么您可以禁用目录更改为
留在那个驱动器上。
目标路径解析为
DOCUMENTS
文件夹,否则 destination
变量将被检测为未定义。
已完成检查以确保初始来源
并且目标路径存在。
由于只复制了 1 个文件,使用
xcopy
个适用于 1 个文件的参数。
看看我说的对不对
要了解代码的作用,请设置
@echo off
到 @echo on
行进行测试。
我有一个批处理脚本,它只能根据用户输入的代码复制 pdf 文件。一旦他们按下回车键,它就会寻找一个与输入代码具有相同文件名的文件夹。如果存在,它将复制里面的 pdf 文件。
现在我遇到了一个问题,因为在一个子文件夹中,它的文件名没有标准文件名。
比如 ex :有时它的文件名是 UV DATA
其他的是 UV-DATA
, UV
pdf 文件的示例文件夹结构存储:
server '----22050-022 '----Folder1 22050-022-DATA.pdf
示例文件夹目标:
server2 '----Folder '----22050-022 '----UV DATA '----DOCUMENTS
UV DATA
文件夹是唯一发生变化的文件夹。
我怎样才能只设置 UV
而第二个字是任何特定的模式?
XCopy 示例,如果它是静态代码,默认文件名是 UV DATA
:
set /p code=Input Control Number:
xcopy "%MySetPath%\Folder\%code%\%code%-DATA.pdf" "%MySetDestination%\Folder1\%code%\UV DATA\DOCUMENTS\" /D /E /C /I /Y /H
我只试过这样的方法但没有用:
set /p code=Input Control Number:
xcopy "%MySetPath%\Folder\%code%\%code%-DATA.pdf" "%MySetDestination%\Folder1\%code%\UV*.*\DOCUMENTS\" /D /E /C /I /Y /H
文件夹中的通配符在xcopy
这个使用 FOR /F
的解决方案有点老套,但绝对有效:
@echo off
set /p "code=Input Control Number:"
for /f "tokens=* delims= " %%a in ('dir /b /ad "%MySetDestination%\Folder1\%code%\UV*"') (
xcopy "%MySetPath%\Folder\%code%\%code%-DATA.pdf" "%MySetDestination%\Folder1\%code%\UV-%%a\DOCUMENTS\" /D /E /C /I /Y /H
)
这会将文件以 UV<ANYTHING HERE>
试一试。您需要在下面设置源路径和目标路径以确保您具有最佳搜索级别,但是由于使用了 dir /s
,您可以转到源路径和目标路径的最低级别:
@echo off
:start
set /p "code=Input Control Number: "
set "source=%HOMEPATH%\%code%"
set "destination=%HOMEPATH%\folder"
if "%code%" == "" echo Please input a valid Control number & goto start
for /f "delims=" %%i in ('dir /b /a-d /s "%source%" ^| findstr /i "%code%" ^| findstr /i "pdf"') do for /f "delims=" %%a in ('dir /b /s /ad "%destination%" ^| findstr /i "%code%" ^| findstr /i "UV" ^| findstr /i "Documents"') do (
echo "%%a"
echo xcopy "%%~i" "%%~a" "/D /E /C /I /Y /H
)
@echo off
setlocal
rem Change current directory to HOMEDRIVE.
cd /d "%HOMEDRIVE%" || (
>&2 echo Failed to change directory to "%HOMEDRIVE%"
exit /b 1
)
rem Get the control number i.e. 22050-022.
set /p "code=Input Control Number: " || exit /b 0
rem Set initial source path and destination path here.
@rem Note: destination path without trailing "\UV*\DOCUMENTS".
set "source=%HOMEPATH%\%code%\Folder1\%code%-DATA.pdf"
set "destination=%HOMEPATH%\Folder\%code%"
rem Check initial source path.
if not exist "%source%" (
>&2 echo Initial source path "%source%" not exist.
exit /b 1
)
rem Check initial destination path.
if not exist "%destination%" (
>&2 echo Initial destination path "%destination%" not exist.
exit /b 1
)
rem Get "%%destination%%\UV*\DOCUMENTS\" path.
(
set "destination="
for /d %%A in ("%destination%\UV*") do if not defined destination (
@rem Force an echo on line break.
if exist "%%~A\DOCUMENTS\" set "destination=%%~A\DOCUMENTS\"
)
if not defined destination (
>&2 echo Failed to get destination from "%destination%".
exit /b 1
)
)
rem Copy file from source to destination if file date is newer.
xcopy /d /y "%source%" "%destination%"
exit /b 0
这将尝试找到目标路径
UV*
在 OP 中指定的路径中和
评论我的理解。
将目录更改为 %HOMEDRIVE%
其他路径
以 %HOMEPATH%
开头可能无效,如果
当前目录在另一个驱动器上。
如果您使用镜像 %HOMEPATH%
的驱动器
那么您可以禁用目录更改为
留在那个驱动器上。
目标路径解析为
DOCUMENTS
文件夹,否则 destination
变量将被检测为未定义。
已完成检查以确保初始来源 并且目标路径存在。
由于只复制了 1 个文件,使用
xcopy
个适用于 1 个文件的参数。
看看我说的对不对
要了解代码的作用,请设置
@echo off
到 @echo on
行进行测试。