2015-12-14 5 views
0

У меня есть 500 файлов .txt в папке. Из них около 100 файлов содержат текст, который я хочу изменить. Для этого я использовал приведенный ниже код.Пакетный скрипт для поиска имен измененных файлов

used Repl.bat and the below code: 
for %%F in (*.txt) do (
type "%%F"|repl Apples Mangoes >"%%F.new" 
move /y "%%F.new" "%%F" 
) 

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

Моя фактическая задача - изменить строку и получить измененные файлы в другую папку. Я попытался использовать приведенный ниже код для перемещения измененных файлов. но поскольку все файлы меняются, я не знаю, что делать.

ECHO OFF 
set source=C:\abc\ 
set destination=C:xyz\ 

for /F "tokens=2-4 delims=/ " %%i in ('date /t') do set yyyymmdd1=%%j"."%%i"."%%k 

if exist %destination% goto GO 
:GO 
mkdir %destination%%yyyymmdd1% 
xcopy %source%* %destination% /m/s/d/y/c/v/r 
echo. 
echo Finished copying %source% to %destination% 
echo. 
echo Created %destination%%yyyymmdd1% 
pause 

Заранее спасибо

+1

Я вижу два подхода: 1) сначала проверьте, если файл содержит слово заменить команду поиска , Затем либо переместите файл без изменений, либо выполните его через repl. 2) вызвать repl для всех файлов, затем сравнить оригинал и скопировать с помощью команды fc – Marged

+0

Спасибо за быстрый ответ. Я новичок в пакетных сценариях, и приведенный выше код не является моим собственным. Я взял его только с этого сайта. пожалуйста, уточните его. – nani

+1

SO не является «напишите мой код». Идея состоит в том, чтобы помочь вам с предложениями. Вы должны быть в состоянии следовать рекомендациям – Marged

ответ

0

Чтобы просто узнать, какие файлы на самом деле были доработаны, по отношению к их содержанию только, вы можете использовать следующий фрагмент кода, который собирает все измененные файлы в лог-файл change.log:

@echo off 
> "change.log" (
    for %%F in ("*.txt") do (
     type "%%~F" | > "%%F.new" repl Apples Mangoes 
     > nul fc /L "%%~F" "%%~F.new" || echo "%%~F" 
     > nul move /Y "%%~F.new" "%%~F" 
    ) 
) 

Это использует fc команду и тот факт, что она устанавливает ErrorLevel в 0 для т а также файлы 1. || представляет собой условный разделитель команд, который выполняет следующую команду только в случае ненулевого ErrorLevel (также называемого кодом выхода или кодом возврата).

Сравнение проводится в текстовом режиме. Чтобы изменить его в двоичном режиме, замените fc /L на fc /B.

Перенаправление > nul избегает каких-либо сообщений о fc (как Comparing files [...], FC: no differences encountered) или move (как 1 file(s) moved.). Если вы хотите видеть сообщения sch на экране, замените > nul на > con.

Чтобы переместить собранные измененные файлы после этого, с помощью следующей командной строки в пакетном сценарии:

for /F "delims=" %%I in ("change.log") do (move "%%~I" "\path\to\destination\") 
Смежные вопросы