2014-02-07 2 views
0

Я пытаюсь создать архив летучей мыши, чтобы удалить -en-нас от этого Mutiple файлов:Ракетка сценарий, чтобы удалить часть имени файла, всегда же

то есть. ежемесячные продажи и аннулирование-en-us.pdf будут переименованы в ежемесячные продажи и аннулирования .pdf.

Этот сценарий ниже будет работать на локальной машине. Однако, если я определяю файловую локацию, которая является общим диском, и запускаю ее, то я получил эту ошибку:

Файл не найден Невозможно найти указанный файл.

Ниже скрипт я использую:

@echo off 
setlocal enabledelayedexpansion 
set deletestring=-en-us 
set filesharelocation=\\companyname\DEV\Testing 
for /f "delims==" %%F in ('dir %filesharelocation% /b /l *-en-us.pdf ^| find "%deletestring%"') do (
    set oldfilename=%%F 
    set newfilename=!oldfilename:%deletestring%=! 
    Ren "!oldfilename!" "!newfilename!" 
    ) 

Может кто-нибудь помочь? Благодарю.

ответ

1

Как он закодирован, %%F возвращает содержимое на выходе команды dir, то есть только имя файла без пути.

Если он выполнен из того же каталога, который содержит файлы, нет проблем, но при повторном запуске его содержимого другого диска/папки, поскольку %%F не содержит путь к файлу, а файлы не в той же папке, чем пакетный файл, линия

Ren "!oldfilename!" "!newfilename!" 

(с oldfilename получается из %% F) не содержит какой-либо путь, только имена файлов.

Простейшим решением является добавление пути.

Ren "%filesharelocation%\!oldfilename!" "!newfilename!" 

или, вы можете изменить текущий диск к папке с файлами

pushd "%filesharelocation%" 
for /f "delims==" %%F in ..... 
    ..... 
) 
popd 
+0

Спасибо, используя это работает: Pushd "% filesharelocation%" для/ф "delims ==" %% F in ..... ..... ) popd – Andy

Смежные вопросы