Я совсем не образован по кодированию, поэтому вам придется извинить любую безнадежную терминологию!Пакетный файл с пробелами в переменных/именах файлов в текстовом файле
Я выбрал несколько фрагментов кода для пакетного файла со всего Интернета (некоторые из них с этого сайта), и я попытался переписать некоторые из них в соответствии с моими потребностями.
Создает новый каталог, затем просматривает другой каталог и все его подкаталоги для имен файлов в списке .txt, а затем копирует эти файлы в каталог, созданный в начале. Любые файлы, которые не найдены в списке, записываются в другой текстовый файл, чтобы отслеживать все, что отсутствует.
Код:
md 00FoundImages
set LIST=%cd%\imagelist.txt
set FILESPATH=%cd%\testimages
set DEST=%cd%\00FoundImages
for /f "delims=" %%x in (%LIST%) do (forfiles /p %FILESPATH% /s /m %%x* /c "cmd /c move /y @path %DEST%\@file" 2>>errors.txt)
Это прекрасно работает в большинстве условий, когда за исключением:
- Имя файла в текстовом файле содержит пробел
- Путь к каталогу в в котором находится файл партии, содержится пробел (или другой специальный символ)
Я попытался заключая в кавычки, так как:
set FILELIST="%cd%\imagelist.txt"
set FILESPATH="%cd%\testimages"
set DESTPATH="%cd%\00FoundImages"
Это терпит неудачу в команде forfiles
как только пространство находится в имени каталога.
Я попытался ограждающих переменную, когда он используется в кавычках, так как:
for /f "delims=" %%x in ("%LIST%") do (forfiles /p "%FILESPATH%" /s /m %%x* /c "cmd /c move /y @path "%DEST%\@file"" 2>>errors.txt)
Когда я запустить пакетный файл из директории под названием «тестирование - Copy», я получаю сообщение об ошибке записывается в мой errors.txt файл
ERROR: Invalid argument/option - '-'.
Type "FORFILES /?" for usage.
Это отпечаток того, что происходит:
E:\ImageAutomationStuff\testing - Copy>md 00FoundImages
A subdirectory or file 00FoundImages already exists.
E:\ImageAutomationStuff\testing - Copy>set LIST=E:\ImageAutomationStuff\testing - Copy\imagelist.txt
E:\ImageAutomationStuff\testing - Copy>set FILESPATH=E:\ImageAutomationStuff\testing - Copy\testimages
E:\ImageAutomationStuff\testing - Copy>set DEST=E:\ImageAutomationStuff\testing - Copy\00FoundImages
E:\ImageAutomationStuff\testing - Copy>pause
Press any key to continue . . .
E:\ImageAutomationStuff\testing - Copy>for /F "delims=" %x in ("E:\ImageAutomationStuff\testing - Copy\imagelist.txt") do (forfiles /p "E:\ImageAutomationStuff\testing - Copy\testimages" /s /m %x* /c "cmd /c move /y @path "E:\ImageAutomationStuff\testing - Copy\00FoundImages\@file"" 2>>errors.txt)
E:\ImageAutomationStuff\testing - Copy>(forfiles /p "E:\ImageAutomationStuff\testing - Copy\testimages" /s /m E:\ImageAutomationStuff\testing - Copy\imagelist.txt* /c "cmd /c move /y @path "E:\ImageAutomationStuff\testing - Copy\00FoundImages\@file"" 2>>errors.txt)
E:\ImageAutomationStuff\testing - Copy>pause
Press any key to continue . . .
с Рез earch Я сделал, я вижу, что вопросы такого характера очень часто спрашивают - извинения за добавление в кучу, но с моими ограниченными знаниями. Боюсь, я просто не могу решить эту проблему самостоятельно!
Имена файлов (или любые другие параметры) с пробелами ДОЛЖНЫ быть заключены в кавычки. '' c: \ Program files \ Office "'. Пробелы ограничивают параметры, если только в кавычках. –
Я попытался включить переменные в кавычки, но это не работает. Я сделал это несколько разных способов, включая переменные на этапе «set» и этап «for/f» – danmosa
. Вы должны показать, как вы их вставляли в кавычки, редактируя свой вопрос. –