скопируйте всю папку в этом случае - PullRequest
0 голосов
/ 19 февраля 2019

Это еще одна проблема, которую я получил в том же коде, которую я уже просил о помощи, поэтому я не уверен, является ли она дубликатом или нет.

Проблема теперь в том, когда я запускаюскрипт, по команде xcopy я хотел иметь возможность скопировать всю папку, в которой находится файл, а не только файл.

@echo off
setlocal enabledelayedexpansion
set /p COU1=COU No. 1 serial number?:
echo COU serial number is: %COU1%
for /f %%i in ('dir /s /b /a-d AssayInfo.txt') do (
  for /f "tokens=2" %%a in ('type "%%~fi" ^| findstr /i "CouID"') do set "number=%%a"
    echo Found number !number! in file "%%~fi"
    if !number!==!COU1! xcopy "%%~fi" "C:\dev\WORKING"
pause
)

, поэтому для упрощения я хочу скопировать всю папку, в которой находится файл "~ fi "был найден вместо только файла

Я также попробовал что-то вроде этого:

set /p COU1=COU No. 1 serial number?:
echo COU serial number is: %COU1%
for /D %%k in ("C:\dev\*") do for /f "tokens=1,* delims=: " %%i in ('type "%%k\AssayInfo.txt" ^| findstr /i CouID') do set "number=%%j" 
if %number%==%COU1% (echo Hello it worked) else (echo ERROR:No files with that serial number)
pause

но проблема здесь в том, что IF-утверждение находится вне FOR, поэтому оно будетизменение номера!даже если оно совпадает и примет последнее найденное значение, отличное от COU1.

Ответы [ 2 ]

0 голосов
/ 19 февраля 2019

Если бы вы предоставили всю необходимую вам информацию с самого начала, вам бы не понадобилось 4 вопросов для выполнения этой задачи.

Исходя из того, что мы теперь знаем, я бы предложил вам выполнитьзадача, подобная этой:

@Echo Off
Set "COU1="

:Ask
Set /P "COU1=COU No. 1 serial number?: "
If Not Defined COU1 GoTo Ask

For /F "Delims=" %%A In ('FindStr /SMIC:"CouId: %COU1%" "AssayInfo.txt" 2^>Nul^
 ^|FindStr /VBLI "WORKING\\"') Do @For %%B In ("%%~dpA."
) Do XCopy "%%~B" "C:\dev\WORKING\%%~nxB" /ECIHRKY>Nul 2>&1

На основании предоставленной вами информации, этот скрипт будет запускаться с C:\dev.

0 голосов
/ 19 февраля 2019

мы можем использовать Robocopy здесь.Но вы пытались скопировать имя файла, а не папку, помните, что мы установили !number! в качестве найденного значения.

@echo off
setlocal enabledelayedexpansion
set /p COU1=COU No. 1 serial number?:
echo COU serial number is: %COU1%
for /f %%i in ('dir /s /b /a-d AssayInfo.txt') do (
  for /f "tokens=2" %%a in ('type "%%~fi" ^| findstr /i "CouID"') do set "number=%%a"
    echo Found number !number! in file "%%~fi"
    set "fpat=%%~dpi"
    set "fpat=!fpat:~0,-1!"
    for %%u in (!fpat!) do set "dst=%%~nu"
    if "!number!"=="!COU1!" robocopy "!fpat!" "C:\dev\WORKING\!dst!" /E
    pause
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...