Historial de archivos: no se pueden analizar las bibliotecas de los usuarios para detectar cambios y realizar una copia de seguridad de los archivos modificados para la configuración

2

Cuando se intenta ejecutar la herramienta Historial de archivos en Windows 8, se ejecuta durante aproximadamente 2 segundos y luego se detiene. No se hace copia de seguridad de los archivos en la unidad seleccionada.

En el visor de eventos el único error que aparece es:

Unable to scan user libraries for changes and perform backup of modified files 
for configuration
C:\Users\win8User\AppData\Local\Microsoft\Windows\FileHistory\Configuration\Config

He intentado eliminar tanto los archivos de configuración como el directorio FileHistory en la unidad de destino. La configuración del Historial de archivos nuevamente genera el mismo error.

¿Hay una mejor manera de rastrear qué está causando la falla? ¿O de alguna manera obtener la herramienta Historial de archivos para crear un archivo de registro más detallado que muestre qué está causando el problema?

azl
fuente

Respuestas:

0

Aquí esta lo que hice. No estoy seguro de que todos estos pasos sean necesarios, pero solo quería estar seguro.

1.

Control panel - & gt; File history - & gt; Advanced Settings - & gt; Open file history event logs y arreglar / borrar todos los archivos que están desordenando el historial de archivos. Para mí había un montón en esta carpeta:

AppData\Local\Microsoft\Windows\WER\ReportArchive\AppCrash_explorer.exe xxxxx

Y los borré. No parecían importantes.

2. Escribí un script rápido de Python para encontrar cualquier archivo con caracteres que no sean ASCII en sus nombres. Cambié el nombre manualmente a todos estos. ¡Esta puede ser la razón por la que el historial de archivos falla en algunas carpetas de música!

import os,string
import sys

validChars='0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ. #^=!()&,_\'-+@%[]{$};`~'

for currdir,folders,filenames in os.walk(r'C:\Users\<username>'):

    //Max filename len on ntfs is 255, but file history adds "F:\FileHistory\<username>\<computer name>\Data" to the front the files and a timestamp to the end so the file really needs to be less than 200 to be safe
    if len(currdir)>200:
        print 200,currdir

    if filter(lambda x: x in validChars, currdir[2:].replace('\\',''))!=currdir[2:].replace('\\',''):
        print 'chars',currdir,

    for filename in filenames:
        if filter(lambda x: x in validChars, filename)!=filename:
            print 'char2',os.path.join(currdir,filename)

EDITAR: No elimine los archivos de Autodesk Inventor, se romperá autodesk. o_o

3.

Historial de archivos - & gt; seleccione unidad - & gt; (elija su unidad) - & gt; (elija su última copia de seguridad) - & gt; el historial de archivos muestra una advertencia acerca de que sus últimas copias de seguridad no están en esta unidad. Hice clic en Aceptar.

apple16
fuente
El mismo problema para mi. Como no sé cómo ejecutar las secuencias de comandos de Python (¿no hay alternativa por lotes?) Moví todo el contenido una carpeta tras otra a la raíz de mi unidad (fuera de la biblioteca) y después de unos minutos, el historial de archivos funciona como se esperaba, por lo que se cuelga en los nombres de archivo o longitudes de ruta como dijiste. Los otros pasos que mencionaste no fueron necesarios. Mi historial de archivos estaba vacío. Espere del error que @azl publicó en su pregunta. Ahora verificaré una subcarpeta después de la otra cuyo archivo causó el problema. Tal vez descubro cuál causó el problema.
mgutt
0

Adapté el script publicado por apple16 arriba para ejecutarlo en Python 3 y lo mejoré un poco. Usando una combinación de excluir selectivamente las carpetas del Historial de archivos y este script para ver posibles problemas, acoté mi problema a dos archivos con nombres casi idénticos en el mismo directorio. Ambos archivos tenían la palabra Español en el nombre del archivo con una tilde sobre la n. Sin embargo, uno tenía la codificación como: Espan \ N {COMBINANDO TILDE} ol y el otro como Espa \ N {LATINA PEQUEÑA LETRA N CON TILDE} ol. Ambos nombres de archivo se enumeran de forma idéntica en el Explorador de Windows con la tilde sobre la n. Cuando coloco estos dos archivos en carpetas separadas, el Historial de archivos los respalda muy bien, pero cuando están en el mismo directorio parecen interferir entre sí y bloquean la operación del Historial de archivos.

Aquí está el script CheckFileNames.py que utilicé:

#CheckFileNames.py, 10 May 2016, LewisN
#Python 3 version adapted and enhanced by LewisN; based on script by apple16 posted on http://superuser.com/
#Scans Windows file system for potentially problematic directories and files affecting File History operation.
#---------------------------------------------------------------------------------
#SET THE FOLLOWING BEFORE RUNNING:
DirectoryTreeToScan = r'C:\Users\<username>'
DaysBackToList = 0    #Number of days back to list. Set to 0 to list all FLAGGED FILES regardless of file dates.
PrintDates = False    #Set True to show File Creation and Modification dates.

#You may also want to play with the following settings:
flagDirLen=200
flagFullNameLen=200
  # Max filename len on Windows is ~255, but File History adds "F:\FileHistory\<username>\<computer name>\Data" to 
  # the front the files and a timestamp to the end, so backing off on name lengths flagged to be safe.
  # Files with long filenames are actually saved to F:\FileHistory\<username>\<computer name>\Data\$OF and can be
  # retrieved using the File History GUI, but you may want to avoid this.  Also there may be cases where
  # long paths and/or filenames cause errors.

#Notes: 
#  1. Filenames with Unicode characters from various languages are also often ok for File History.  
#     This script exposes these characters so they can be examined for potential problems.
#  2. Filenames with initial dots (also flagged here) are ok for File History (use cmd prompt to edit them).
#---------------------------------------------------------------------------------

import os,string,time,datetime
import sys

validChars="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ. #^=!()&,_'-+@%[]{$};`~"
disallowedChars=r'\/:*?"<>|'
# Note that many other characters are also actually allowed.  Windows expressly disallows \/:*?"<>|    

lastdirheader=''

def PrintDirHeaderIfNeeded():
    global lastdirheader
    if currdir!=lastdirheader:
        print ('===FLAGGED FILES IN DIRECTORY',currdir.encode("ascii","replace").decode()+':')
        lastdirheader = currdir
        return;

def PrintFileDates():
    fname=os.path.join(currdir,filename)
    print('      Created: ' + time.ctime(os.path.getctime(fname)) + ', Modified: ' + time.ctime(os.path.getmtime(fname)))
    return;

def IsRecent(DaysBack):
    fname=os.path.join(currdir,filename)
    if DaysBack==0: return True   # 0 disables limiting file listings based on file dates
    if ((datetime.datetime.now()-datetime.datetime.fromtimestamp(os.path.getctime(fname))).days<DaysBack) or \
       ((datetime.datetime.now()-datetime.datetime.fromtimestamp(os.path.getmtime(fname))).days<DaysBack):
        return True 
    else: return False;

for currdir,folders,filenames in os.walk(DirectoryTreeToScan):

    if len(currdir)>flagDirLen:
        print('===DIRLEN>' + str(flagDirLen) + ':', currdir.encode("ascii","replace").decode())

    if ''.join([x for x in currdir[2:].replace('\\','') if x in validChars])!=currdir[2:].replace('\\',''):
        print('===DIR CHARS+:',currdir.encode("ascii","namereplace").decode())

    for filename in filenames:

        if (len(currdir)+len(filename)>flagFullNameLen) and IsRecent(DaysBackToList):
            PrintDirHeaderIfNeeded()
            print('     FULLNAMELEN>' + str(flagFullNameLen) + ':', filename.encode("ascii","replace").decode())
            if PrintDates: PrintFileDates() 

        if ''.join([x for x in filename if x in validChars])!=filename and IsRecent(DaysBackToList):
            PrintDirHeaderIfNeeded()
            print('     CHARS+:',filename.encode("ascii","namereplace").decode())
            if PrintDates: PrintFileDates() 

        if filename[0:1] == "." and IsRecent(DaysBackToList):
            PrintDirHeaderIfNeeded()
            print('     INITIAL DOT:',filename.encode("ascii","replace").decode())
            if PrintDates: PrintFileDates()

        if any(True for x in filename if x in disallowedChars) and IsRecent(DaysBackToList):
            PrintDirHeaderIfNeeded()
            print('     DISALLOWED (' + disallowedChars + '):',filename.encode("ascii","replace").decode())
            if PrintDates: PrintFileDates()
LewisN
fuente